我有一个rails应用程序,它正在使用nokogiri gem 1.4.0版解析HTML
为了解析和清理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:"Arial","sans-serif""><o:p></o:p></span></p>
有没有办法让野村不在这个标签上爆炸?理想情况下,如果可能的话,我希望它像hpricot一样保持标签不变。如果没有,那么至少剥离标签比抛出错误要好。
我在Nokogiri 1.4.0中看到了这个问题。Nokogiri>=1.4.1解决了名称空间定义问题。