【发布时间】:2010-11-01 07:46:17
【问题描述】:
假设我想使用XOM 将大量搜索结果以XML 格式输出到PrintWriter 或OutputStream。生成的 XML 如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<resultset>
<result>
[child elements and data]
</result>
...
...
[1000s of result elements more]
</resultset>
因为生成的 XML 文档可能很大(可能有数百兆字节),所以我想以流式方式输出它(而不是在内存中创建整个 Document 然后再写入)。
一次输出一个<result>的粒度是可以的,所以我想一个接一个地生成一个<result>,写入到流中。换句话说,我只是想做一些类似这样的伪代码(启用自动刷新,所以不用担心):
open stream/writer
write declaration
write start tag for <resultset>
while more results:
write next <result> element
write end tag for <resultset>
close stream/writer
我一直在看Serializer,但是必要的方法,writeStartTag(Element)、writeEndTag(Element)、write(DocType) 是受保护的,而不是公开的!除了将 Serializer 子类化以便能够使用这些方法,或者将开始和结束标记作为字符串直接写入流中,完全绕过 XOM 之外,没有其他方法吗? (在这个简单的例子中后者不会太糟糕,但在一般情况下它会变得很丑。)
是我遗漏了什么还是 XOM 不是为此而生的?
使用dom4j,我可以使用XMLWriter 轻松做到这一点——它具有采用Writer 或OutputStream 的构造函数,以及writeOpen(Element)、writeClose(Element)、writeDocType(DocumentType) 等方法。与XOM 的@ 相比987654340@,其中唯一的公共 write 方法是采用整个 Document 的方法。
(这与my question about the best dom4j replacement 有关,XOM 是一个强有力的竞争者。)
【问题讨论】: