いくつかの条件に基づいてのみ属性を追加したいなど、xslt の条件が 1 行ありますか?
例えば
<name (conditionTrue then defineAttribute)/>
もし避けるために
<xsl:if test="true">
<name defineAttribute/>
</xsl:if>
いくつかの条件に基づいてのみ属性を追加したいなど、xslt の条件が 1 行ありますか?
例えば
<name (conditionTrue then defineAttribute)/>
もし避けるために
<xsl:if test="true">
<name defineAttribute/>
</xsl:if>
<xsl:element>
出力要素と<xsl:attribute>
その属性の作成に使用できます。次に、条件付き属性を追加するのは簡単です。
<xsl:element name="name">
<xsl:if test="condition">
<xsl:attribute name="myattribute">somevalue</xsl:attribute>
</xsl:if>
</xsl:element>
これは、指定する必要性を完全に回避する方法の一例です<xsl:if>
。
このXMLドキュメントを作成しましょう:
<a x="2">
<b/>
</a>
また、の親の属性の値が偶数の場合にのみb
、属性に追加します。parentEven="true"
x
b
明示的な条件付き命令なしでこれを行う方法は次のとおりです。
<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="a[@x mod 2 = 0]/b">
<b parentEven="true">
<xsl:apply-templates select="node()|@*"/>
</b>
</xsl:template>
</xsl:stylesheet>
この変換を上記のXMLドキュメントに適用すると、必要な正しい結果が生成されます。
<a x="2">
<b parentEven="true"/>
</a>
注意してください:
テンプレートとパターンマッチングを使用すると、明示的な条件付き命令を指定する必要が完全になくなります。XSLTコードに明示的な条件付き命令が存在することは、「コードの臭い」と見なされ、可能な限り回避される必要があります。