首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止一对XMLEvent[读取器]将空标记拆分为start+end标记?

如何防止一对XMLEvent[读取器]将空标记拆分为start+end标记?
EN

Stack Overflow用户
提问于 2010-03-14 16:06:24
回答 2查看 1.3K关注 0票数 1

对于以下代码的工作方式,我有一个理解问题:

代码语言:javascript
复制
XMLInputFactory xif = XMLInputFactory.newFactory();
XMLOutputFactory xof = XMLOutputFactory.newFactory();

XMLEventReader reader = xif.createXMLEventReader(/* ... */);
XMLEventWriter writer = xof.createXMLEventWriter(/* ... */);

writer.add(reader);

方法writer.add(某些读取器)读取读取器中的所有事件,并最终写入它们。可悲的是,发生了以下情况:

输入

代码语言:javascript
复制
<root><c/></root>

转换为

代码语言:javascript
复制
<root><c><c/></root>

我知道,从XML的角度来看,这些树是平等的,但不是人类的;)

我怎样才能得到相同的输出?

FYI:我需要一个XMLEventReader\Writer对来过滤"XML事件“。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-14 16:31:45

根据XMLEvents列表,似乎没有办法做出区分,它确实会生成一个StartElementEndElement事件。当StartElement后面紧跟一个EndElement时,使用者将需要对情况进行优化。

这显然不是工厂返回的XMLEventReader的情况。如果你想自己优化这种行为,我想做的就是

  • 检查由XMLEventReader返回的具体createXMLEventReader实现是什么
  • 子类XMLEventReader实现,以优化这种情况
  • 子类XMLInputFactory和重写createXMLEventReader以返回XMLEventReader子类的实例

如果这听起来太复杂(或者不起作用),我建议您使用使用一种解决方案XMLStreamWriter。这个方法有一个专用的方法writeEmptyElement

(或者您可以尝试一下我的国产漂亮打印机,它基于XMLStreamWriter)

票数 1
EN

Stack Overflow用户

发布于 2010-04-01 05:59:53

除非我弄错了,否则可以将伍德斯托克斯配置为生成空标记(默认)或不生成(因此它总是输出start+end标记,即使没有内容)。因为您可以为XMLStreamWriter配置它,然后可以使用该流编写器生成XMLEventWriter,所以它应该可以按预期工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2442732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档