2013-03-29 53 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文件,這樣

相關問題