2008-12-16 5 views

Répondre

4

C'est un très forme générale, mais où vous ne connaissez pas la liste à temps de conception, aussi longtemps que vous pouvez obtenir une référence à un nodeset qui représente la liste que vous pouvez faire un test simple comme:

<xsl:when test="$listset/item[@property=$variable]"> 

où dire la variable $ =/foo/bar/@ propriété et $ ListSet =/foo/liste XML

<?xml version="1.0"?> 
<foo> 
    <bar property="gb" /> 
    <list> 
    <item property="gb"/> 
    <item property="us"/> 
    </list> 
</foo> 
1

Essayez d'utiliser le xsl:choose. (Voir aussi the spec here) Il fournit une base si/fonctionnalité autre. EDIT- je l'ai fait tester et il fonctionne:

<xsl:choose> 
    <xsl:when test="domain = 'GB' or domain = 'US' or domain = 'ES' or domain = 'FR'"> 
    print this html 
    </xsl:when> 
    <xsl:otherwise> 
    print other html 
    </xsl:otherwise> 
</xsl:choose> 
0

Si vous utilisent XSLT 2.0 étant donné le fichier

Vous pouvez utiliser quelque chose comme ceci:
<xsl:template match="list/item">
Property [<xsl:value-of select="@property"/>] html
</xsl:template>

<xsl:template match="list/item[some $x in ('us', 'gb') satisfies $x eq @property ]">
Property [<xsl:value-of select="@property"/>] HTML
</xsl:template>

0

Une autre solution, non mentionné par les 3 actuelles réponses est d'avoir une chaîne de les options par rapport auxquelles vous comparez la valeur de domain. Puis l'expression XPath suivante (dans l'attribut de @test soit <xsl:if> ou <xsl:when> évalue à true() exactement quand la valeur de domain est l'une des valeurs délimitées dans la chaîne (nous utilisons un espace pour delimiter dans cet exemple concret):

  contains(' GB US ES ', concat(' ', domain, ' '))

nous supposons ici qu'il n'y a pas d'espace dans la valeur de domain Si cela ne peut pas être garantie, l'expression XPath peut également vérifier cette exigence.

  not(contains(domain, ' '))
and
  contains(' GB US ES ', concat(' ', domain, ' '))

Questions connexes