2013-03-29 52 views
1

我一直在使用Nokogiri解析它时遇到了“分配内存失败”的问题。为此我写了下面的代码。分析大型XML文件时出现'分配内存失败'

require 'open-uri' 
require 'nokogiri' 
f = File.open("/my_pplications/XML/one.xml") 
doc = Nokogiri::XML(f)  
stack = Hash.new 
doc.children.each do |x| 
    x.children.each do |sx| 
    sx.children.each do |v|  
    stack[v.name] = v.text  
    end 
    end 
end 


这里如果one.xml文件的大小smaller,我能够解析和得到的一切。 但是,如果该文件是too large(more than 700MB),我得到的错误如"[FATAL] failed to allocate memory"。那么如何解析完整的大型XML文件。

任何人都可以帮我吗?

+0

除了增加内存,你是什么意思?您可以尝试Nokogiri :: XML :: SAX – pguardiario

+0

请参阅http://stackoverflow.com/questions/8728046/how-to-use-sax-with-nokogiri –

回答

4

Nokogiri :: XML构建了整个文档的内存表示,因此占用的内存比文档的磁盘大小多得多。然后遍历它并使用xpath或css查询很容易。

另一种方法是使用nokogiri的SAX解析器。 sax解析器几乎没有任何内存开销,因为它没有将整个文档存储在内存中:它只是遍历文档,告诉你提供的关于有趣事件的对象,比如标签foo已经开始,我找到了一些文本,foo标签有封闭等

这是一般的多一点的工作,用这个,而不是更高层次的接口,但你能吞食巨大的XML文件,这样

相关问题