2012-04-02 16 views
4

Groovyの新機能です。XmlSlurperを使用して大規模なXMLファイル(1Gb以上)を読み込もうとしています。メモリ内にDOM全体を構築していないという事実に似ています。XmlSlurperで大規模なXMLファイルを解析する

しかし、私は明らかに "OutOfMemoryError:Java heap space"を取得し続けているので、明らかに間違っていると思います。私はXmxの設定を増やしてみましたが、後に大きなファイルを扱わなければならないかもしれないので、むしろ問題を解決したいと思います。

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 –

答えて

8

GroovyのXmlSlurper

はOOMの例外を避けるために... SAXパーサですが、メモリにモデル全体をロードし、あなたはおそらく必要があるのいずれかにあなたの記憶手当アップ(あなたが言うように、-Xmx設定を使用)、またはwrite your own SAX parserを使用すると、文書から必要なデータだけを取得することができます

+1

それはそれを説明します。ありがとう! –

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 Parserをtim_yatesのように書くことで問題を解決しましたが、将来同様の(そしておそらくより大きい)量のデータに対処することになっているので、そんなことができてうれしいです。それを指摘してくれてありがとう! –

関連する問題