我正在尝试使用Ruby的Nokogiri解析大型(1 GB或更大)的XML文件。我正在一个仅包含4个记录的较小文件上测试代码(可在此处获取)。我使用的是Nokogiri 1.5.0版本、Ubuntu 10.10上的Ruby 1.8.7。由于我不太理解SAX,所以我尝试使用Nokogiri::XML::Reader开始。
我的第一次尝试,是想要检索PMID标签的内容,代码如下:
#!/usr/bin/ruby
require "rubygems"
require "nokogiri"
file = ARGV[0]
reader = Nokogiri::XML::Reader(File.open(file))
p = []
reader.each do |node|
if node.name == "PMID"
p << node.inner_xml
end
end
puts p.inspect
这是我希望看到的内容:
["21714156", "21693734", "21692271", "21692260"]
这是我实际看到的内容:
["21714156", "", "21693734", "", "21692271", "", "21692260", ""]
看起来由于某些原因,我的代码对于每个PMID实例都会发现或生成一个额外的、空的PMID标签。要么是inner_xml
不像我想象的那样正常工作了。
如果有人能确认我的代码和数据是否生成了所示结果,并建议我在哪里出错,我将不胜感激。