6

我是 Groovy 的新手,我正在尝试使用 XmlSlurper 读取一个(相当)大的 XML 文件(超过 1Gb),由于它不会构建整个 DOM,因此它应该可以对大文件产生奇迹在记忆中。

尽管如此,我还是不断收到“OutOfMemoryError : Java heap space”,这让我认为显然有些事情我做错了。我尝试增加 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 邮件列表提出了一个建议,实际上是建议向 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

我希望这有帮助!

于 2012-04-05T12:58:07.520 回答