我是Groovy的新手,我正在尝试使用XmlSlurper读取一个(相当)大的XML文件(超过1Gb),因为它不会构建,因此应该可以处理大文件的奇迹内存中的整个DOM。
尽管如此,我仍然得到“OutOfMemoryError:Java堆空间”,这让我觉得显然有些事我做错了。我尝试增加Xmx设置,但我宁愿解决问题,因为之后我可能不得不处理更大的文件。
以下是我使用的代码行:
def posts = new XmlSlurper().parse(new File("posts.xml"))
任何关于错误的提示?
提前致谢,
热雷米。
答案 0 :(得分:8)
Groovy的XmlSlurper
是一个SAX解析器,但是将整个模型加载到内存中......
为了避免OOM异常,您可能需要提高内存容量(正如您所说,使用-Xmx
设置),或者您可以write your own SAX parser从文档中获取所需的数据
答案 1 :(得分:3)
我参加这个派对有点晚了,但我也遇到了同样的问题。
我向groovy-user邮件列表提出了一个建议,实际上建议在XmlSlurper中添加类似于XML :: Twig perl模块的东西。
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"));
我希望这有帮助!