下面的代码(基于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注释。如果我用streamsource替换staxsource/xmlstreamreader,则注释将被保留。
有人知道为什么xmlstreamreader/staxsource组合会将它们去掉,以及是否有任何方法可以防止它们?测试在没有第三方jar的1.6和1.7环境中完成,因此xmlstreamreader成为
com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl

谢谢

最佳答案

编辑:
只是按描述试过了。

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

它确实读到了评论。但这还不能回答最初的问题…

10-08 14:43