2010-06-09 5 views
1

J'ai un modèle qui ressemble à ci-dessousSélectionner un modèle pour l'exécution en utilisant une condition, y compris variable apply-templates

< xsl: template match = mode "plus-info" = "docuSection"> html </xsl: template>

et qui est appliqué à l'appel

< xsl: apply-templates select = "." mode = « docuSection » />

de sorte que le modèle est appliqué lorsque le noeud courant a plus-info élément, est-il un moyen de faire ce modèle s'appliqué avec le même appel et à la condition que inclut une variable globale match = « $ mode = « modifier » ou plus-info »

Cordialement, Keshav

+0

Bonne question: +1. Voir ma réponse pour des explications et des solutions complètes. –

Répondre

1

est-il un moyen de faire ce modèle s'appliqué avec le même appel et à la condition inclut une variable globale match = "$ mode = 'modifier' ou plus-info"

Dans XSLT 2.0 est parfaitement légal:

<xsl:template match="more-info[$mode = ('edit', 'more-info')]" 
mode="docuSection"> 

Dans XSLT 1.0, il est interdit d'utiliser la variable ou références clés dans un motif de correspondance.

Cependant, on peut utiliser l'une des techniques suivantes:

I. Dans le à traiter instruction <xsl:apply-templates> spécifier le nœud liste exacte des noeuds.

<xsl:apply-templates mode="docuSection" 
    select="self::*[$mode = 'edit' or $mode='more-info']" /> 

||. Rendre le motif de correspondance plus général, mais effectuer un traitement dans le modèle uniquement si la condition souhaitée est remplie:

<xsl:template match="more-info" mode="docuSection"> 
<xsl:if test="$mode = 'edit' or $mode='more-info'"> 
    html 
</xsl:if> 
</xsl:template> 
Questions connexes