假设我想使用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
orOutputStream
和方法writeOpen(Element)
等writeClose(Element)
的构造函数writeDocType(DocumentType)
。与 XOM相比Serializer
,其中唯一的公共write
方法是采用整体的方法Document
。
(这与我关于XOM 是强有力竞争者的最佳 dom4j 替代品的问题有关。)