2009-08-02 5 views

Répondre

5

Essayez ceci:

<xsl:element name="li"> 
    <xsl:if test="@class = 'selected'"> 
     <xsl:attribute name="class"> 
      selected 
     </xsl:attribute> 
    </xsl:if> 
</xsl:element> 

En option, le xsl:if pourrait être imbriquée dans le xsl:attribute, au lieu de l'inverse, si un class="" est souhaité. Comme déjà mentionné, il est imprudent d'écrire ceci comme texte littéral.

+0

Pour plus de lisibilité, il est préférable d'éviter xsl inutile: élément appelle et incorpore l'élément li directement. –

5

Vous ne devriez pas essayer d'écrire ceci en tant que texte littéral, regardez plutôt les attributs xsl: element et xsl:. exemple grossier:

<xsl:element name="li"> 
    <xsl:attribute name="class"> 
     <xsl:value-of select="$selected" /> 
    </xsl:attribute> 
</xsl:element> 

Full documentation here.

3

Notez que si vous êtes assez prudent pour en faire son premier enfant, vous pouvez utiliser <xsl:attribute> directement à l'intérieur de votre balise <li>, au lieu d'utiliser <xsl:element>

<li> 
    <xsl:if test="$selected"> 
     <!-- Will refer to the last opened element, li --> 
     <xsl:attribute name="class">selected</xsl:attribute> 
    </xsl:if> 

    <!-- Anything else must come _after_ xsl:attribute --> 
</li> 
Questions connexes