XSL转换不包括cdata部分的特定qname?

时间:2012-12-06 08:58:00

标签: xml xslt

我正在进行xstl转换,我想从源xml保留一个CDATA条目。因此我相应地定义了cdata-section-elements。但是我有一个带有属性name="test"的qname。在那里,我不想应用cdata。我该如何排除这个元素?

.XML

<my:request><![CDATA[<foo...>]]>
<my:request>

<my:request name="test">
</my:request>

的.xsl

<xsl:output cdata-section-elements="my:request"/>

1 个答案:

答案 0 :(得分:1)

根据属性,不可能有异常!

BUT !!如果您坚持使用其他解决方案,那么我会建议您为没有属性<![CDATA[的元素my:request插入name。请参阅下面的示例:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://www.w3.org/2001/something">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>


  <xsl:template match="my:request[not(@name)]">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>

      <!--Insert CDATA-->
      <xsl:value-of select="'&#60;![CDATA['" disable-output-escaping="yes"/>
      <xsl:apply-templates select="node()"/>
      <xsl:value-of select="']]&#62;'" disable-output-escaping="yes"/>
    </xsl:copy>
  </xsl:template>


</xsl:stylesheet>

输入XML:

<?xml version="1.0" encoding="utf-8"?>
<my:root xmlns:my="http://www.w3.org/2001/something">
  <my:request other="something">data</my:request>    
  <my:request name="test">data</my:request>
</my:root>

输出XML:

<?xml version="1.0" encoding="utf-8"?>
<my:root xmlns:my="http://www.w3.org/2001/something">
  <my:request other="something"><![CDATA[data]]></my:request>    
  <my:request name="test">data</my:request>
</my:root>