3
下面的代碼(基於來自http://jax-ws.java.net/nonav/jax-ws-20-fcs/arch/com/sun/xml/ws/util/xml/StAXSource.html樣本代碼)爲什麼XMLStreamReader/StAXSource去除XML中的註釋?
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組合去除它們,是否有任何方法來阻止它?該測試是在1.6和1.7的環境中完成的,沒有第三方罐,所以XMLStreamReader的成爲
com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl
感謝
「罪魁禍首」是StAXStream2SAX,它是Xalan從Stax的XMLStreamReader源執行標識轉換的默認方式。它將註釋轉換爲no op(我的jdk8上的第386行)。除了切換Source實現或XSLT實現之外,似乎沒有辦法解決這個問題。 – GPI