Nokogiri выдает ошибку при синтаксическом анализе html с помощью

#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