2012-04-02 193 views
4

我對Groovy很陌生,我正在嘗試使用XmlSlurper讀取一個(相當)大的XML文件(超過1Gb),該文件應該可以在大文件到它不會在內存中構建整個DOM的事實。儘管如此,我仍然不斷收到「OutOfMemoryError:Java堆空間」,這讓我覺得顯然有些事情我做錯了。我試圖增加Xmx設置,但我寧願解決問題,因爲之後我可能不得不處理更大的文件。用XmlSlurper解析(非常)大型的XML文件

下面是我用的代碼行:

def posts = new XmlSlurper().parse(new File("posts.xml")) 

什麼地方不對勁任何提示?

在此先感謝,

Jérémie。

+0

這個問題是類似的:http://stackoverflow.com/questions/4104264/is-it-possible-to-parse-sub-trees-with-groovy-xmlslurper – 2016-02-11 13:24:59

回答

8

Groovy的XmlSlurper是SAX解析器,但加載整個模型到內存...

爲了避免OOM異常,你可能需要或者你的內存津貼(如你所說,使用-Xmx設置),或者您可以write your own SAX parser從文檔中獲取您需要的數據

+1

那麼解釋它。謝謝 ! – 2012-04-02 14:30:40

3

我對這次派對有點遲,但我也有同樣的問題。

我對groovy-user郵件列表提出了一個建議,實際上建議添加一些看起來像XML :: Twig perl模塊到XmlSlurper的東西。

def xpathSlurper = new XPathXmlSlurper2();  
def c = { twig, it ->  
    println it.text().trim(); 
    twig.purgeCurrent(); 
} 
xpathSlurper.setTwigRootHandler(xpath, c); 
def fdata = xpathSlurper.parse(new File("test.xml")); 

我在這裏的附加示例代碼: http://groovy.329449.n5.nabble.com/first-step-toward-Xml-Twig-for-Groovy-groovy-util-XPathXmlSlurper2-groovy-td4923577.html

我希望這有助於!

+0

現在我通過編寫我自己的SAX解析器解決了我的問題,因爲tim_yates提出了這個問題,但由於我將來會處理類似(可能更大)的數據量,所以我很樂意擁有類似的東西。感謝您指出! – 2012-04-12 13:30:46