これを行う方法を 2 つ例を挙げて説明します。2 つ目はお勧めです。
次の XML ドキュメントがあるとします。
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
num
そして、偶数の要素が「削除」された別のものを生成したいと考えています。
これを行う1つの方法は次のとおりです。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<nums>
<xsl:apply-templates/>
</nums>
</xsl:template>
<xsl:template match="num">
<xsl:choose>
<xsl:when test=". mod 2 = 1">
<num><xsl:value-of select="."/></num>
</xsl:when>
<!-- <xsl:otherwise/> -->
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
必要な結果が生成されます。
<nums>
<num>01</num>
<num>03</num>
<num>05</num>
<num>07</num>
<num>09</num>
</nums>
注意してください:「何もしない」場合は必要なく、<xsl:otherwise>
コメントアウトされています。
より良い解決策:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="num[. mod 2 = 0]"/>
</xsl:stylesheet>
これにより、同じ正しい結果が得られます。
num
ここでは、偶数の値と空の本文を持つ要素に一致するテンプレートを使用してアイデンティティ ルールをオーバーライドしています。これは「削除」を行います。
注意してください:
ここでは、"if-then-else" の明示的な命令はまったく使用しません。XSLT の最も特徴的な機能である Xtemplate パターン マッチングのみを使用します。