Разбор (очень) больших файлов XML с помощью XmlSlurper - PullRequest
5 голосов
/ 02 апреля 2012

Я новичок в Groovy и пытаюсь прочитать (довольно) большой XML-файл (более 1 ГБ), используя XmlSlurper, который должен творить чудеса с большими файлами из-за того, что он не собираетсявесь DOM в памяти.

Тем не менее, я продолжаю получать «OutOfMemoryError: Java heap space», который заставляет меня думать, что, очевидно, что-то я делаю неправильно.Я попытался увеличить настройку Xmx, но я бы скорее решил проблему, поскольку впоследствии мне, возможно, придется иметь дело с еще большими файлами.

Вот строка кода, которую я использовал:

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

Любойнамек на что не так?

Заранее спасибо,

Джереми.

Ответы [ 2 ]

8 голосов
/ 02 апреля 2012

Groovy XmlSlurper - это SAX-парсер, но загружает всю модель в память ...

Чтобы избежать исключений OOM, вам, вероятно, нужно либо увеличить допуск памяти (как вы говорите, используя настройку -Xmx), либо вы можете написать свой собственный анализатор SAX , чтобы получить только те данные, которые вы требовать от документа

3 голосов
/ 05 апреля 2012

Я немного опоздал на эту вечеринку, но у меня возникла та же проблема.

Я внес предложение в список рассылки groovy-user, фактически предлагая добавить что-то похожее наPerl-модуль XML :: Twig для 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

Надеюсь, это поможет!

...