2009-06-17 2 views

Répondre

19

XSLT/XPath 1.0:

<!-- a space-separated list of valid values --> 
<xsl:variable name="list" select="'7 8 9'" /> 

<xsl:if test=" 
    contains( 
    concat(' ', $list, ' '), 
    concat(' ', $k, ' ') 
) 
"> 
    <xsl:value-of select="concat('Item ', $k, ' is in the list.')" /> 
</xsl:if> 

Vous pouvez utiliser d'autres séparateurs si nécessaire.

Dans XSLT/XPath 2.0, vous pouvez faire quelque chose comme:

<xsl:variable name="list" select="fn:tokenize('7 8 9', '\s+')" /> 

<xsl:if test="fn:index-of($list, $k)"> 
    <xsl:value-of select="concat('Item ', $k, ' is in the list.')" /> 
</xsl:if> 

Si vous pouvez utiliser la structure du document pour définir votre liste, vous pouvez faire:

<!-- a node-set defining the list of currently valid items --> 
<xsl:variable name="list" select="/some/items[1]/item" /> 

<xsl:template match="/"> 
    <xsl:variable name="k" select="'7'" /> 

    <!-- test if item $k is in the list of valid items --> 
    <xsl:if test="count($list[@id = $k])"> 
    <xsl:value-of select="concat('Item ', $k, ' is in the list.')" /> 
    </xsl:if> 
</xsl:template> 
+0

Ty m8. Son overkill pour un scénario simple comme je l'ai mais c'est OK pour les longues listes ... Je suis plus sautillante que xpath a une forme de solution intégrée .... – majkinetor

+0

Pas XPath 1.0 - lorsque vous ne pouvez pas utiliser des ensembles de nœuds pour résoudre votre problème que vous êtes à des fonctions de chaîne ou peut-être une fonction d'extension. Les séquences de XPath 2.0 rendent les choses plus faciles dans tous les cas. – Tomalak

+0

Ty Tomalak :). – majkinetor

1

Dans XSLT 2.0, vous pourriez essayez d'utiliser l'opérateur de plage. Vous ne savez pas si vous pouvez lancer une ficelle en ligne?

<xsl:if test="$k = string(7 to 9)"> 

Peut-être faire l'inverse et jeté $k à un certain nombre?

<xsl:if test="number($k) = (7 to 9)"> 
Questions connexes