XML DocumentBuilder删除CDATA部分

时间:2015-09-01 06:08:40

标签: java xml cdata

我在 weblogic 上有网络应用
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 包括不支持CDATA部分的旧java库。

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

1 个答案:

答案 0 :(得分:1)

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

Debug Variables

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

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

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

现在你将在输出中有CDATA部分。

相关问题