2013-04-03 16 views
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 

感謝

回答

0

編輯: 只是試圖描述here

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

,它請閱讀評論。儘管如此,這並不能回答原始問題......

+0

「罪魁禍首」是StAXStream2SAX,它是Xalan從Stax的XMLStreamReader源執行標識轉換的默認方式。它將註釋轉換爲no op(我的jdk8上的第386行)。除了切換Source實現或XSLT實現之外,似乎沒有辦法解決這個問題。 – GPI