【发布时间】:2014-07-03 18:58:30
【问题描述】:
我有一个巨大的 XML 文件,如下所示:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
</book>
[... one gazillion more entries ...]
</catalog>
我想以流的方式迭代这个文件,这样我就不必将整个文件加载到内存中,比如:
InputStream stream = new FileInputStream("gigantic-book-list.xml");
String nodeName = "book";
Iterator it = new StreamingXmlIterator(stream, nodeName);
Document bk101 = it.next();
Document bk102 = it.next();
另外,我希望它可以处理不同的 XML 输入文件,而不必创建特定的对象(例如 Book.java)。
@McDowell 有一个很有前途的方法,它在 https://stackoverflow.com/a/16799693/13365 使用 XMLStreamReader 和 StreamFilter,但它只提取单个节点。
另外,Camel's .tokenizeXML 完全符合我的要求,所以我想我应该查看源代码。
【问题讨论】: