java - 为什么 XMLStreamReader/StAXSource 从 XML 中去除注释?

标签 java xml stax xml-comments xmlstreamreader

下面的代码(基于 http://jax-ws.java.net/nonav/jax-ws-20-fcs/arch/com/sun/xml/ws/util/xml/StAXSource.html 中的示例代码)

String xml = "<a><b>a text</b><!--a comment--><b/></a>";
StringReader sr = new StringReader(xml);
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(sr);
Source source = new StAXSource(reader);     
//Source source = new StreamSource(sr);
Result result = new StreamResult(System.out);      
TransformerFactory.newInstance().newTransformer().transform(source, result);

产生以下结果:

<?xml version="1.0" encoding="UTF-8"?><a><b>a text</b><b/></a>

即它去掉了 xml 注释。如果我将 StAXSource/XMLStreamReader 替换为 StreamSource,则保留注释。

有谁知道为什么 XMLStreamReader/StAXSource 组合将它们去掉,是否有任何方法可以防止它?测试是在没有第三方 jar 的 1.6 和 1.7 环境中完成的,因此 XMLStreamReader 变成了一个

com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl 

谢谢

最佳答案

编辑: 刚刚按照描述尝试过 here

case XMLStreamConstants.COMMENT:
  System.out.print("<!--");
  if (xmlr.hasText())
     System.out.print(xmlr.getText());
...

它确实阅读了评论。这还没有回答原来的问题......

关于java - 为什么 XMLStreamReader/StAXSource 从 XML 中去除注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15792007/

相关文章:

java - JFileChooser 文件夹选择问题

java - 为什么 javax.xml.stream.XMLEventReader 扩展原始 Iterator 而不是 Iterator<XmlEvent>?

java - 当字符串实习生()方法被调用时

java - 解码 Dozer 映射文件以提供映射库

java - 以 3x3 模式排列屏幕

java - 使用 JAVA 切片 SOAP 响应

c# - 为什么 XmlNamespaceManager 返回 HasNamespace 的结果不一致?

java - Woodstox stax 和 java stax 冲突

java - 使用 StAX 修改一个 XML 文件

java - 安卓日志类