TransformerHandler输出CDATA部分

时间:2011-09-25 06:51:48

标签: 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));
    }

1 个答案:

答案 0 :(得分:1)

尝试重新阅读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”声明是什么,并在文字QName中包含名称空间URI。

示例(假设ns1前缀的名称空间声明看起来像xmlns:ns1 =“http://softee.org”,您应该指定;

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

相关问题