使用XmlSlurper解析(非常)大型XML文件

时间:2012-04-02 13:31:07

标签: xml groovy xmlslurper

我是Groovy的新手,我正在尝试使用XmlSlurper读取一个(相当)大的XML文件(超过1Gb),因为它不会构建,因此应该可以处理大文件的奇迹内存中的整个DOM。

尽管如此,我仍然得到“OutOfMemoryError:Java堆空间”,这让我觉得显然有些事我做错了。我尝试增加Xmx设置,但我宁愿解决问题,因为之后我可能不得不处理更大的文件。

以下是我使用的代码行:

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

任何关于错误的提示?

提前致谢,

热雷米。

2 个答案:

答案 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")); 

我在这里附上了示例代码: http://groovy.329449.n5.nabble.com/first-step-toward-Xml-Twig-for-Groovy-groovy-util-XPathXmlSlurper2-groovy-td4923577.html

我希望这有帮助!