我想迭代一个 XML 文档,该文档本质上是一个结构相同的 XML 元素的列表。这些元素将被序列化为 Java 对象。
<root>
<element attribute="value" />
<element attribute="value" />
<element attribute="value" />
...
</root>
Run Code Online (Sandbox Code Playgroud)
根元素中有很多元素。我不想将它们全部加载到内存中。我意识到我可以为此使用 SAX 处理程序,但使用 SAX 处理程序将所有内容反序列化为 Java 对象似乎相当迟钝。我发现 JDOM 非常容易使用,但据我所知,JDOM 总是解析整个树。有没有一种方法可以使用 JDOM 一次解析一个子元素?
使用 JDOM 的另一个原因是它使得为相应的 Java 对象编写序列化/反序列化代码变得容易,如果不完全在内存中,这些代码就毫无意义。但是,我不想同时将所有 Java 对象加载到内存中。相反,我想对它们进行一次迭代。
更新:以下是如何在 dom4j 中执行此操作的示例:http://docs.codehaus.org/display/GROOVY/Reading+XML+with+Groovy+and+DOM4J。无论如何要在 jdom 中执行此操作吗?
一种可以减少内存需求的简单方法是使用 XPath 和 JDOM 来查询 XML 的子集,并仅获取满足查询的那些位。
否则你可以看看Elliotte Rusty Harold 的这个有趣的提示,它表明你想要的流 API 就在那里,只是没有广告:
JDOM 确实有一个流 API。它只是有点隐藏,没有广泛宣传或解释。在 XOM 中,我使这种方法更加明确并记录下来。如果您想要流式树模型,那么使用 XOM 可能会更好,但如果您必须坚持使用 JDOM,那么阅读 XOM 示例可能会给您提供有关如何在流式模式下使用 JDOM 的足够线索。
归档时间: |
|
查看次数: |
7788 次 |
最近记录: |