假设我想将大量搜索结果以 XML 的形式输出到 PrintWriter 或 OutputStream 中,使用XOM。生成的 XML 将如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<resultset>
<result>
[child elements and data]
</result>
...
...
[1000s of result elements more]
</resultset>
因为生成的 XML 文档可能很大(可能有数百兆字节),所以我想以流式传输方式输出它(而不是在内存中创建整个文档然后写入)。
输出的粒度<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 不是为此而设计的?
With dom4j我可以使用轻松做到这一点XMLWriter- 它有构造函数Writer
or OutputStream
、和方法writeOpen(Element)
, writeClose(Element)
, writeDocType(DocumentType)
等 与 XOM 相比Serializer
那里唯一的公众write
方法是一种需要整体的方法Document
.
(这与我关于最佳 dom4j 替代品的问题XOM 是一个强有力的竞争者。)