使用Nokogiri :: XML :: Reader处理无效的XML

时间:2012-09-06 18:24:22

标签: xml-parsing nokogiri

我发现Nokogiri xml阅读器严格遵循xml语法,所以如果遇到xml中的无效字符,例如非转义的&符号(例如<tag> Garage & Driveway </tag>)将导致抛出错误。

所以当我按照以下方式使用阅读器时:

Nokogiri::XML::Reader(infile).each do |node|
  # does stuff with node
end

引发错误:

Entity: line 1056614: parser error : xmlParseEntityRef: no name
            <tag>The & is invalid</tag>
                      ^

transmogrifier/gems/nokogiri-1.5.5/lib/nokogiri/xml/reader.rb:106:in `each'

使用这样的XML:

<root> 
  <items>
    <tag>The & is invalid</tag>
  </items>
  <items>  ...  </items>
<root>

解析大型文档。我注意到Nokogiri :: XML :: Parser优雅地处理了这个(更多),并删除了所有无效字符,这给了我一个更优雅的解决方案的希望。

理想情况下,我希望能够捕获错误并继续进行每次解析(因为很少的项目包含无效字符)。关于如何妥善处理这个问题的任何建议?

我注意到你可以通过ParseOptions,但没有运气使用它们。

提前致谢!

1 个答案:

答案 0 :(得分:0)

Nokogiri::XML切换到Nokogiri::HTML,这对XML错误更加宽容,可能会有所帮助。