我只是围绕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
}
还是我完全不在赛道上?
答案 0 :(得分:1)
StAX是一种前向唯一的流API。要实现您所要求的是对DOM解析器的潜在要求,您可以单独构造节点“伙伴”,如果它不为空,则将其附加到主文档。