Nokogiri HTML-синтаксический анализ не определен метод 'namespace_definitions' взрывается на теге <o: p> - PullRequest
2 голосов
/ 22 июня 2011

У меня есть приложение rails, которое анализирует HTML, используя версию nokogiri gem 1.4.0

Для анализа и очистки фрагмента HTML, я использую это:

Nokogiri::HTML::DocumentFragment.parse(text).to_html

Я получаю эту ошибку, когда пытаюсь разобрать некоторые входные данные, которые работали при использовании hpricot для разбора:

NoMethodError: undefined method `namespace_definitions' for nil:NilClass
    from .../nokogiri-1.4.0/lib/nokogiri/xml/fragment_handler.rb:33:in `start_element'
    from .../nokogiri-1.4.0/lib/nokogiri/html/sax/parser.rb:34:in `parse_with'
    from .../nokogiri-1.4.0/lib/nokogiri/html/sax/parser.rb:34:in `parse_memory'
    from .../nokogiri-1.4.0/lib/nokogiri/xml/sax/parser.rb:83:in `parse'
    from .../nokogiri-1.4.0/lib/nokogiri/xml/document_fragment.rb:7:in `initialize'
    from .../nokogiri-1.4.0/lib/nokogiri/html/document_fragment.rb:9:in `new'
    from .../nokogiri-1.4.0/lib/nokogiri/html/document_fragment.rb:9:in `parse'

Я отследил его до тега, который из того, что я получил, является тем, что MS Office использует для обозначения разрывов абзаца.

<p class="MsoNormal"><span style="font-family:&quot;Arial&quot;,&quot;sans-serif&quot;"><o:p></o:p></span></p>

Есть ли способ заставить Нокогири не взорваться на этом теге? В идеале мне бы хотелось, чтобы тег оставался неизменным, как это сделал бы hpricot, если это возможно. Если нет, то хотя бы удаление тегов было бы лучше, чем выдача ошибки.

1 Ответ

4 голосов
/ 13 сентября 2011

Я видел эту проблему с Nokogiri 1.4.0. Nokogiri> = 1.4.1 решает проблему определения пространства имен.

...