2012-04-02 2 views
4

저는 Groovy에 익숙하지 않습니다. XmlSlurper를 사용하여 대용량 XML 파일 (1Gb 이상)을 읽으려고합니다. 큰 파일을 가지고 놀랄만한 일을하기로되어 있습니다. 메모리에 전체 DOM을 빌드하지 않는다는 사실에 기인합니다.XmlSlurper로 대용량 XML 파일 구문 분석하기

그럼에도 "OutOfMemoryError : Java heap space"가 계속 나오므로 분명히 내가 잘못하고 있다고 생각하게 만듭니다. 나는 Xmx 설정을 늘려 보았지만 나중에 더 큰 파일을 다루어야하기 때문에 문제를 해결할 것입니다.

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

무엇이 잘못되었는지에 대한 어떤 힌트 : 여기에

내가 사용하는 코드의 라인? 사전에

감사합니다,

제레미.

+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

지금 당장 tim_yates가 제안한대로 내 자신의 SAX Parser를 작성하여 문제를 해결했지만 이후에 유사한 (아마도 더 큰) 수량의 데이터를 다루기로되어서 그런 식으로 기뻤습니다. 그것을 지적 주셔서 감사합니다! –

관련 문제