6

私はGroovyに少し慣れていないので、XmlSlurperを使用して(かなり)大きなXMLファイル(1Gb以上)を読み取ろうとしています。これは、DOM全体を構築しないため、大きなファイルでも驚異的に機能するはずです。メモリ内。

それにもかかわらず、「OutOfMemoryError:Javaヒープスペース」が発生し続けているため、明らかに間違っていることがあると思います。Xmx設定を増やしてみましたが、後でさらに大きなファイルを処理しなければならない可能性があるため、問題を解決したいと思います。

これが私が使用したコード行です:

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

何が悪いのかについてのヒントはありますか?

前もって感謝します、

ジェレミー。

4

2 に答える 2

8

GroovyXmlSlurperは SAX パーサーですが、モデル全体をメモリにロードします...

OOM例外を回避するには、おそらくメモリ許容量を増やす必要があります(-Xmx設定を使用して)、または独自のSAXパーサーを作成して、ドキュメントから必要なデータだけを取得できます

于 2012-04-02T13:45:20.620 に答える
4

私はこのパーティーに少し遅れていますが、私も同じ問題を抱えています。

私はgroovy-userメーリングリストに提案し、実際にはXML ::Twigperlモジュールのようなものを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

これがお役に立てば幸いです。

于 2012-04-05T12:58:07.520 に答える