Скажем, я хочу вывести огромный набор результатов поиска, как 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?
С dom4j Я мог бы сделать это легко, используя XMLWriter - у него есть конструкторы, которые принимают Writer или OutputStream, а методы writeOpen(Element), writeClose(Element), writeDocType(DocumentType) и т.д. Сравните с XOM Serializer, где единственный общедоступный метод write это тот, который принимает целое Document.
(Это связано с моим вопросом о лучшей замене dom4j, где XOM является сильным соперником.)