我尝试使用 Saxon 代替 JDK 的默认实现(我猜是 Xalan)来进行 XML 转换和 Xpath。在我的代码中,我正在使用 document.createCDATASection(data) 方法创建一个 CDATA 节点。代码如下所示:
CDATASection cdata = doc.createCDATASection("data");
Node valueNode = node.appendChild(doc.createElement("value"));
valueNode.appendChild(cdata);
其中 node 是我的 XML 中的某个随机节点。它适用于 JDK 的默认实现,生成的 XML 如下所示:
<node>
<value><![CDATA[data]]></value>
</node>
如果我包含 Saxon maven 工件,相同的代码开始表现得很奇怪(请注意,它只是包含,工厂选择/实例化是默认的,就像之前一样)并且所有 cdata 节点都被视为简单的文本节点,即 XML 变为:
<node>
<value>data</value>
</node>
检索时会导致问题,因为该代码专门检查 cdata 元素,这些元素在以后的情况下已被删除。我不确定为什么会发生这种情况(看起来我没有正确使用它)。我还尝试从我的 POM(Saxon 的传递依赖项)中排除 Xerces 工件,但没有运气。此外,验证了 JDK 本身正在使用 DocumentBuilderFactory 等的实现类。如果我做错了什么,请专家帮助我。
提前致谢。