#ruby-on-rails #ruby #html-parsing #nokogiri
#ruby-on-rails #ruby #html-синтаксический анализ #nokogiri
Вопрос:
Nokogiri::HTML выдает ошибку при добавлении <meta charset='UTF-8>
в HTML-файл.
Файл следующий:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>My super content</title>
<link rel="stylesheet" type="text/css" href="./static.css">
</head>
<body>
<footer>
<p></p>
</footer>
<script type="text/javascript" src="./static.js"></script>
</body>
</html>
Когда я разбираю его, я получаю:
$ doc = Nokogiri::HTML(open('myfile.html'))
$ doc.errors
> [#<Nokogiri::XML::SyntaxError: 10:12: ERROR: Tag footer invalid>]
Удаление <meta charset="UTF-8">
устраняет проблему.
Почему? И как я могу заставить его работать с ним?
Ответ №1:
Nokogiri — это в первую очередь анализатор XML и, следовательно, ожидает в основном корректного XML. Хотя HTML очень похож на XML, особенно с HTML 5, существуют разные правила, например, о закрывающих тегах и алгоритмах для обнаружения таких вещей, как кодирование, что делает HTML 5 несовместимым с XML и синтаксическими анализаторами XML.
В вопросе, связанном с вашей проблемой, ответ Майка Далессио (одного из сопровождающих nokogiri) был соответствующим:
Nokogiri не поддерживает HTML5. Возможно, вы захотите ознакомиться с проектом Nokogumbo, целью которого является совместимость HTML5 с анализатором Gumbo.
Комментарии:
1. См. также: github.com/sparklemotion/nokogiri/issues/2064