我正在尝试使用以下代码输出 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/