我正在尝试使用以下代码输出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));
}
答案 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”);