XML文档生成器移除CDATA部分。

3

我在 Weblogic 上有一个 Web 应用程序,它:
1. 从数据库中读取 XML
2. 对其进行解析
3. 添加新的部分
源 XML 包含 CDATA 部分。

<?xml version="1.0" encoding="UTF-8" ?>     
    <script type="calcscript">
    <![CDATA[  some data ]]>
    </script>

当我解析xml时
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder();
  Document xml = builder.parse(new ByteArrayInputStream(bytes));

它会移除 CDATA 部分!
转换回字符串后

Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringWriter sw = new StringWriter();
Result output = new StreamResult(sw);
Source input = new DOMSource(xml);
transformer.transform(input, output);

我收到的XML如下所示:
<?xml version="1.0" encoding="UTF-8" ?> 
<script type="calcscript">
some data
</script>

为什么会移除 CDATA 部分?可能是因为 Weblogic 包含旧的 Java 库,不支持 CDATA 部分。
附言:当我在 Tomcat 服务器或 Java 应用程序上运行应用程序时,一切正常。

我建议你首先要做的是找出它实际上是在解析部分还是格式化部分。查看解析文档中的所有节点。 - Jon Skeet
1个回答

1
首先,解析过程不会删除CDATA信息。看一些调试信息:

Debug Variables

第二点:这是转换过程,可以摆脱那些CDATA部分,因为这在规范中没有定义(请查看Michael Kay在此问题中的回答)。
但是,您可以设置一些属性以使转换器能够保留这些部分:
transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "script");

现在您的输出中将有CDATA部分。

你是正确的...谢谢。在设置转换器属性后,它会解析带有CDATA部分的XML。 - rpc1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接