2012-10-11 41 views
3

我遇到了javax.xml.transform.Transformer类及其setOutputProperty方法的问题。我试图让一个XML输出Java输出XML文件和CDATA

<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格式。

回答

2

您不能 - OutputKeys.CDATA_SECTION_ELEMENTS输出属性对应于<xsl:output>的XSLT cdata-section-elements属性,并且只允许您根据QNames定义元素,而不匹配表达式。

但是它应该没关系,因为<foo>text</foo><foo><![CDATA[text]]></foo>就XML解析器而言是相同的。

+0

感谢您的回复。我不知道稍后会在XML中使用什么解析器,但是我希望这个额外的CDATA不会引起任何它不应该出现的问题。我甚至试图传递一个包含CDATA标签的字符串,但之后Transformer在解析“<" and ">”字符时出现问题。 – maxPayne