我需要用ruby解析一个大的(4gb) xml文件,最好使用nokogiri。我见过很多使用
的代码示例File.open(path)
但是这对我来说太花时间了。是否有一个选项来逐节点读取xml,以防止在一个节点上加载文件。或者解析如此大的文件的最快方法是什么。最好的菲尔。
您可以尝试使用Nokogiri::XML::SAX
SAX风格解析器的基本工作方式是创建一个解析器,告诉解析器我们感兴趣的事件,然后给出解析器要处理一些XML。解析器将在此情况下通知您遇到你想知道的事情。
我使用LibXML http://xml4r.github.io/libxml-ruby/(require 'xml'
)和它的LibXML::XML::Reader API来做这种工作。它比SAX更简单,并且允许您做几乎所有的事情。REXML也包含一个类似的API,但是它有很多bug。像我提到的流api或SAX在处理大文件时不应该有任何问题。我没有测试过Nokogiri
您可以尝试一下- https://github.com/amolpujari/reading-huge-xml
HugeXML.read xml, elements_lookup do |element|
# => element{ :name, :value, :attributes}
end
我也试过使用ox