如何防止一对XMLEvent [Reader | Writer]将空标签分成start + end标签?
问题描述:
我有下面的代码是如何工作的认识问题:如何防止一对XMLEvent [Reader | Writer]将空标签分成start + end标签?
XMLInputFactory xif = XMLInputFactory.newFactory();
XMLOutputFactory xof = XMLOutputFactory.newFactory();
XMLEventReader reader = xif.createXMLEventReader(/* ... */);
XMLEventWriter writer = xof.createXMLEventWriter(/* ... */);
writer.add(reader);
的方法writer.add([读者一些])读取器中的所有事件,并将其写入结果。可悲的是,发生以下情况:
输入
<root><c/></root>
被转化为
<root><c><c/></root>
我知道,从XML角度看,这些都是平等的树木,而不是一个人;)
我能做些什么来获得相同的输出?
仅供参考:稍后我需要一个XMLEvent [Reader | Writer]对过滤“XML事件”。
答
按照list of XMLEvents好像是没有办法使区别,它的确会产生StartElement
和EndElement
事件。消费者需要针对StartElement
紧接着是EndElement
的情况进行优化。
这显然不是工厂返回的XMLEventReader
的情况。如果你想自己优化这种行为,我看不出有什么其他的办法,而不是像做
- 检查有什么用
createXMLEventReader
- 子类
XMLEventReader
实现返回来优化这种情况下 - 子
XMLInputFactory
具体XMLEventReader
实施并覆盖createXMLEventReader
以返回您的XMLEventReader
子类的一个实例
如果这听起来太复杂了(或者不是喔rk),我建议你去a solution使用XMLStreamWriter
。这一个有一个专门的方法writeEmptyElement
。
(或者你可以试用一下我的home-made pretty printer,它是基于XMLStreamWriter
)
答
除非我弄错了,Woodstox可以适当配置可以产生空标签(默认),或没有(所以它总是会输出开始+结束标记,即使没有内容)。 由于您可以对XMLStreamWriter进行配置,因此您可以使用该流编写器生成XMLEventWriter,它应该按预期工作。
_“除非我错了” - - 谁会知道更好!? ;-) – 2011-07-07 13:37:38
:-) - 好的,没错,我很可能会在这个特定的事情上弄错。 – StaxMan 2011-07-07 19:31:52