我在 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时,一切正常
答案 0 :(得分:1)
首先,解析过程不会删除CDATA信息。看一些调试信息:
第二:正是转换过程摆脱了那些CDATA部分,因为这根本没有在规范中定义(看看Michael Kay的答案in this question)。
但是,您可以为变换器设置一些属性,使其能够保留这些部分:
transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "script");
现在你将在输出中有CDATA部分。