0

我正在做一个 xstl 转换,我想保留来自源 xml 的 CDATA 条目。因此,我相应地定义了 cdata-section-elements。但是我有相同的 qname 和一个属性name="test"。那里我不想应用 cdata。我怎样才能排除这个元素?

.xml

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

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

.xsl

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

1 回答 1

1

不,不可能有基于属性的异常!

但!!如果您坚持使用替代解决方案,那么..我建议您插入一个没有属性<![CDATA[的元素..请参阅下面的示例:my:requestname

<?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>
于 2012-12-06T09:50:58.240 回答