0

ソースxmlからCDATAエントリを保持したいxstl変換を行っています。したがって、それに応じて 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 に答える