2010-01-28 6 views
6

Ich habe folgendes Szenario. Ich habe eine Liste von Ländern (EG, Saudi-Arabien, Vereinigte Arabische Emirate, AG)Erstellen Sie eine Liste/Array in XSLT

Ich brauche eine XML-Eingabe zu überprüfen, ob es in dieser Liste enthalten ist oder nicht:

<xsl:variable name="$country" select="Request/country" > 

<!-- now I need to declare the list of countries here --> 

<xsl:choose> 
<!-- need to check if this list contains the country --> 
<xsl:when test="$country='??????'"> 
    <xsl:text>IN</xsl:text> 
</xsl:when> 
<xsl:otherwise> 
    <xsl:text>OUT</xsl:text> 
</xsl:otherwise> 
</xsl:choose> 

Hinweis: Ich bin mit XSLT 1.0 .

+0

diese Liste gehört auf dem XML-Eingang? –

+0

Wie lautet die Eingabe-XML? Sind die Ländercodes Textknoten Kinder oder Elemente oder z.B. Attribute? – jelovirt

Antwort

1

Probieren Sie etwas wie, wenn Ihr Land Liste auf dem XML-Eingabe gehört:

<xsl:when test="/yourlist[country = $country]'"> 

Oder, wenn das statische ist, könnten Sie gehen mit:

<xsl:when test="$country = 'EG' or $country = 'KSA' or ..."> 
+1

'' ist überflüssig - es entspricht "' . :-) – Tomalak

+0

netter Tipp Tomalak, ty –

4

EDIT

Beim Lesen Deinen Beitrag nochmal, ich denke die Originalversion meiner Antwort (; unten) ist es nicht.

Sie haben eine Liste bereits - Ihre Variablendeklaration wählt eine Knotenmenge aller <country> Knoten, die Kinder von <Request> (ein Knoten-Set ist das XSLT-Äquivalent eines Array/Liste) sind:

<xsl:variable name="$country" select="Request/country" > 

Aber der Punkt ist, Sie brauchen nicht einmal brauchen diese Liste als eine separate Variable; alles, was Sie brauchen, ist:

<xsl:when test="Request[country=$country]"><!-- … --></xsl:when> 

Wo Request[country=$country] wie liest „Innerhalb <Request>, schauen bei jedem <country> und wählen Sie es, wenn es gleich $country ist.“ Wenn der Ausdruck eine nicht leere Knotenmenge zurückgibt, befindet sich $country in der Liste.

Das ist in der Tat, was Rubens Farias von Anfang an gesagt hat. :)


Ursprüngliche Antwort, für die Aufzeichnung gehalten.

Wenn von "Liste" bedeuten Sie eine durch Kommata getrennte Zeichenfolge von Token:

<!-- instead of a variable, this could be a param or dynamically calculated --> 
<xsl:variable name="countries" select="'EG, KSA, UAE, AG'" /> 
<xsl:variable name="country" select="'KSA'" /> 

<xsl:choose> 
    <!-- concat the separator to start and end to ensure unambiguous matching --> 
    <xsl:when test=" 
    contains(
     concat(', ', normalize-space($countries), ', ') 
     concat(', ', $country, ', ') 
    ) 
    "> 
    <xsl:text>IN</xsl:text> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:text>OUT</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 

2
<xsl:variable name="$country" select="Request/country"/> 
<xsl:variable name="countries">|EG|KSA|UAE|AG|</xsl:variable> 

<xsl:when test="contains($countries,$country)">...</xsl:when>