即使元素为空,如何在所有XML节点上包含CDATA标记?

时间:2016-01-28 21:04:26

标签: xml xslt xsd

目前我正在使用以下代码将CDATA标记应用于元素。我遇到的问题是,无论元素中是否有数据,我都需要应用CDATA标记。例如 - <Column1></Column1>没有CDATA标记,<Column2>2</Column2>也没有。如何适用于所有元素?谢谢。

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes" 
                cdata-section-elements
                  ="Column1 Column2 "/>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

你可以这样做:

<xsl:template match="*[not(normalize-space() or *)]">
  <xsl:copy>
    <xsl:text/>
  </xsl:copy>
</xsl:template>

通过强制将文本节点作为任何既没有子元素又没有文本的元素的子元素,它会在输出时添加CDATA。

如果您使用的图书馆不允许这样做,您可以将<xsl:text/>替换为:

<xsl:text disable-output-escaping="yes"><![CDATA[]]></xsl:text>

虽然这也不能保证工作,但我个人认为在编写使用DOE的XSL之后需要洗个澡。

然而,迈克尔是对的,没有API应该要求存在空的CDATA标签,它绝对值得与设计API的人解决这个问题。