Nokogiri HTML解析未定义的方法'namespace_definitions'在<o:p>标签上爆炸</o:p>

时间:2011-06-22 17:42:05

标签: namespaces html-parsing nokogiri

我有一个使用nokogiri gem 1.4.0版本解析HTML的rails应用程序

要解析和清理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>

有没有办法让Nokogiri不炸掉这个标签?理想情况下,我希望它只是像hpricot那样保持标签不变,如果可能的话。如果没有,那么至少剥离标签会比抛出错误更好。

1 个答案:

答案 0 :(得分:4)

我在Nokogiri 1.4.0中看到了这个问题。 Nokogiri&gt; = 1.4.1解决了名称空间定义问题。