Java 输出 XML 文件和 CDATA

3

我遇到了javax.xml.transform.Transformer类及其setOutputProperty方法的问题。我正在尝试获取XML输出。

   <name>
  <text>XXXXXXXXXX</text>
</name>
<questiontext format="html">
  <text><![CDATA[YYYYYYYYYYY]]></text>
</questiontext>

但是使用以下方法:
        Transformer trans = transfac.newTransformer();
    trans.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "text");

造成两个文本节点被CDATA标记嵌入的原因如下:
    <name>
  <text><![CDATA[XXXXXXXXXX]]></text>
</name>
<questiontext format="html">
  <text><![CDATA[YYYYYYYYYYY]]></text>
</questiontext>

所以我猜我需要一种指定文本元素父级的方法,但我还没有找到一种方法来实现这个目标,而且javadocs没有说明使用哪种符号。同时我也无法改变输出XML格式。

1个回答

2
您无法这样做 - OutputKeys.CDATA_SECTION_ELEMENTS 输出属性对应于 XSLT 的 cdata-section-elements 属性,而该属性只允许您使用 QNames 来定义元素,而不是匹配表达式。
但这并不重要,因为对于 XML 解析器来说,<foo>text</foo><foo><![CDATA[text]]></foo> 是相同的。

感谢您的回复。我不知道将来我的XML会使用什么解析器,但我希望这个额外的CDATA不会引起任何问题,因为它不应该。我甚至尝试传递一个包含CDATA标记的字符串,但是转换器在解析“<”和“>”字符时出现了问题。 - maxPayne
<foo>text</foo><foo><![CDATA[text]]></foo>完全不同。考虑到“text”包含XML字符,例如“t<>/./?><<<>M”,在这种情况下,将其包装成CDATA将是您唯一的选择,并且对于XML解析器来说肯定很重要。 - mvdssel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接