我只是对 Stax XMLStreamWriter 有这个问题。最好用例子来解释:
假设我需要以某种方式生成这样的文档:
<buddies>
<buddies name="tim"/>
<buddies name="toady"/>
</buddies>
,其中 tim 和 toady 家伙是由一些回调创建的,该回调接收 XMLStreamWriter 作为参数。
writer.writeElement("buddies");
callback1.writeBuddies(writer);
callback2.writeBuddies(writer);
write.writeEndElement();
现在的问题是,整个文档必须符合以下模式:如果有一个<buddies>
元素,那么里面必须至少有一个<buddy>
,所以如果我的回调没有在流上写任何东西,我就会有一个无效的空元素. 问题是:我可以writeElement("buddies")
像这样延迟吗:
// Pseudocode
Mark mark = writer.getPos()
boolean written = callback1.writeBuddies(writer)
written |= callback2.writeBuddies(writer)
if (written){
writer.writeStartElement(mark, "buddies") // write at mark
writer.writeStopElement() // write at the end of stream
}
还是我完全偏离了轨道?