java - TransformerHandler 输出 CDATA 部分

标签 java cdata

我正在尝试使用以下代码输出 CDATA 部分。虽然其他声明受到尊重,但 CDATA 部分仍然以纯文本形式出现,没有其封闭标签 (CDATA)。我做错了什么?

    private TransformerHandler getHandler(StringWriter sw) {
        SAXTransformerFactory stf = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
        TransformerHandler th = null;
        th = stf.newTransformerHandler();

        th.getTransformer().setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "{ns1}elem");
        th.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes");
        th.getTransformer().setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        th.setResult(new StreamResult(sw));
    }

最佳答案

尝试重新阅读 OutputKeys.CDATA_SECTION_ELEMENTS 的 JavaDoc 部分:http://docs.oracle.com/javase/6/docs/api/javax/xml/transform/OutputKeys.html#CDATA_SECTION_ELEMENTS

...以及如何指定文字 QName http://docs.oracle.com/javase/6/docs/api/javax/xml/transform/package-summary.html#qname-delimiter 的引用解释

您指定的参数值“{ns1}elem”在我看来并不包含命名空间 URI,而看起来像是命名空间前缀 (ns1)。找出“xmlns:ns1”声明是什么,并将命名空间 URI 包含在文字 QName 中。

示例(假设 ns1 前缀的命名空间声明类似于 xmlns:ns1="http://softee.org",您应该指定;

setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "{http://softee.org}elem");

关于java - TransformerHandler 输出 CDATA 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7544066/

相关文章:

android - 无法使用 SimpleXML 和 Retrofit 解析带有 CDATA block 的 xml

java - 导出为可运行Jar文件,java执行错误

java - 我可以自动下载带链的 X.509 证书吗?

java - 使用 maven-clean-plugin 删除目录

java - 使用类变量与将局部变量发送到函数/方法

c# - 正则表达式用 C# 从 CDATA 中解析出 html

java - 就性能而言,隐式(自动)拆箱或显式拆箱哪个更好?

xml - 以 XML 格式存储 base64 数据?

javascript - Uncaught ReferenceError : initialize is not defined

asp.net - 为什么 CDATA 在脚本标签下被注释掉了?