2

我只是对 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
}

还是我完全偏离了轨道?

4

1 回答 1

1

StAX 是一个只转发的流 API。为了实现您的要求,DOM 解析器的潜在要求是您单独构建节点“伙伴”并将其附加到主文档(如果它不为空)。

于 2013-07-05T12:45:11.130 回答