2016-06-27 4 views
0

特定の条件で<xsl:element>にクラスを追加しようとしていますが、defという属性のxmlタグがありました。クラスを追加する必要がありますこの属性は存在します。ここで特定の条件でクラス属性を「<xsl:element>」に追加

は、XSLT要素である:私が試した

<xsl:element name="{if (@id='123') then 'th' else 'td'} > 
<xsl:apply-template /> 
</xsl:element> 

何を:使用して

<th scope="row" class="def-{if (fn:exists(@def)) then @def else ''}"> 
<td scope="row" class="def-{if (fn:exists(@def)) then @def else ''}"> 

<xsl:attribute name="class">def- 
     <xsl:if test="fn:exists(@def)"> 
     <xsl:value-of select="@def"/> 
     </xsl:if> 
    </xsl:attribute> 
    <xsl:element name="{if (@role='rowhead') then 'th' else 'td'}" use-attribute-sets="{$class}" > 
<xsl:apply-templates /> 
    </xsl:element> 

私はこれのマッチング表現をしたいと思います

<xsl:element> 
あなたはすぐに xsl:element後に属性が要素上へ付加されます xsl:attributeを使用する場合は
+0

あなたの出力がどのように見えるかの例を挙げることができますか?また、入力XMLも表示すると、それはあまりにも役立ちます。ありがとう! –

+0

@TimC私の質問を編集しましたので、それを確認してください。 ありがとう –

答えて

1

を動的に特定の条件に基づいて属性を作成するには、これまであなたのコード...

<xsl:element name="{if (@role='rowhead') then 'th' else 'td'}"> 
    <xsl:if test="fn:exists(@def)"> 
     <xsl:attribute name="class" select="concat('def-', @def)"/> 
    </xsl:if> 
    <xsl:apply-templates /> 
</xsl:element> 

を再ジグ。属性は子要素の前に作成する必要があることに注意してください。

+0

おかげさまで、私はuse-attribute-sets = "{$ class}"の使い方を尋ねるかもしれません –

+0

あなたが追加したい 'xsl:attribute-set'で定義された属性のセットを持っているときです複数の要素に簡単に追加できます。 https://www.w3.org/TR/xslt#attribute-setsを参照してください。 –

関連する問題