我真正想要的是一个类似于StAX的流式API,有点像DOM / JDom。
这将是流媒体,因为它会非常懒惰,并且在需要之前不会读取内容。它也会流式传输它会读取所有向前(但不向后)。
以下是使用这种API的代码。
URL url = ...
XMLStream xml = XXXFactory(url.inputStream()) ;
// process each <book> element in this document.
// the <book> element may have subnodes.
// You get a DOM/JDOM like tree rooted at the next <book>.
while (xml.hasContent()) {
XMLElement book = xml.getNextElement("book");
processBook(book);
}
这样的事情是否存在?
答案 0 :(得分:1)
解析文档的一部分而不将其完全加载到内存中的唯一方法是使用SAX解析器。
以下是有关如何使用SAX的一些官方SUN示例:http://java.sun.com/developer/codesamples/xml.html#sax
答案 1 :(得分:1)
您可以执行以下操作:
使用 SAX 或 StAX 扫描XML文件,然后立即将所有内容整合回StringBuilder
,即创建自己的XML文件副本
如果您遇到endElement
并且您知道自己不需要解析的子树,请清除StringBuilder
。
如果您需要,可以从您创建的“副本”构建DOM树。
通过这种方式,您可以回退到标准框架,一个用于传统的SAX解析,一个用于传统的DOM构建。只有自定义的serizalization可能需要一些黑客攻击。
如果您需要提前知道树边界,它也会有所帮助。 (在您的示例中预订元素)否则将需要进一步处理。