XML DocumentBuilder 删除了 CDATA 部分

XML DocumentBuilder removes CDATA Section

我在 weblogic 上有 webapp,它
1.reads XML 来自数据库
2.parses吧
3.adds 新栏目
来源 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 包含不支持 CDATA 部分的旧 java 库。

P.S。当我在 tomcat 服务器上 运行 应用程序或 java 应用程序时一切正常

首先,解析过程并没有去除CDATA信息。查看一些调试信息:

其次:正是转换过程摆脱了那些 CDATA 部分,因为这根本没有在规范中定义(查看 Michael Kay in this question 的回答)。

但是,您可以为转换器设置一些属性,使其能够保留这些部分:

transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "script");

现在您将在输出中包含 CDATA 部分。