我嘗試使用Saxon代替JDK對XML轉換和Xpath的默認實現(我猜Xalan)。在我的代碼中,我使用document.createCDATASection(data)方法創建CDATA節點。代碼看起來如下給出:使用Saxon創建文檔createCDATASection方法的奇怪行爲(Maven Saxon -HE artifact 9.4)
CDATASection cdata = doc.createCDATASection("data");
Node valueNode = node.appendChild(doc.createElement("value"));
valueNode.appendChild(cdata);
其中節點是我的XML中的一些隨機節點。 它工作正常使用JDK的默認實現和生成的XML看起來像:
<node>
<value><![CDATA[data]]></value>
</node>
相同的代碼開始表現奇怪,如果我包括撒克遜Maven構件(請注意,這只是包容和工廠選擇/實例是默認的,因爲它前面是)和所有CDATA節點被視爲簡單的文本節點,即XML變爲:
<node>
<value>data</value>
</node>
其上檢索導致問題作爲代碼專門檢查其在後一種情況下已被刪除CDATA元件。我不知道爲什麼會發生這種情況(看起來像我沒有正確使用它)。我也嘗試從我的POM(Saxon的傳遞依賴)中排除Xerces工件,但沒有運氣。此外,還驗證了JDK本身正在使用DocumentBuilderFactory等的實現類。如果我做錯了事,請專家幫助我。
在此先感謝。
謝謝邁克爾。用你的答案解決了問題。非常感謝。 – prashant