对于以下代码的工作方式,我有一个理解问题:
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的角度来看,这些树是平等的,但不是人类的;)
我怎样才能得到相同的输出?
FYI:我需要一个XMLEventReader\Writer对来过滤"XML事件“。
发布于 2010-03-14 16:31:45
根据XMLEvents列表,似乎没有办法做出区分,它确实会生成一个StartElement和EndElement事件。当StartElement后面紧跟一个EndElement时,使用者将需要对情况进行优化。
这显然不是工厂返回的XMLEventReader的情况。如果你想自己优化这种行为,我想做的就是
XMLEventReader返回的具体createXMLEventReader实现是什么XMLEventReader实现,以优化这种情况XMLInputFactory和重写createXMLEventReader以返回XMLEventReader子类的实例如果这听起来太复杂(或者不起作用),我建议您使用使用一种解决方案的XMLStreamWriter。这个方法有一个专用的方法writeEmptyElement。
(或者您可以尝试一下我的国产漂亮打印机,它基于XMLStreamWriter)
发布于 2010-04-01 05:59:53
除非我弄错了,否则可以将伍德斯托克斯配置为生成空标记(默认)或不生成(因此它总是输出start+end标记,即使没有内容)。因为您可以为XMLStreamWriter配置它,然后可以使用该流编写器生成XMLEventWriter,所以它应该可以按预期工作。
https://stackoverflow.com/questions/2442732
复制相似问题