2010-01-28 22 views
6

Tengo la siguiente situación. Tengo una lista de países (por ejemplo, KSA, EAU, AG)Crear una lista/matriz en XSLT

Tengo que comprobar una entrada XML si está contenida en esta lista o no:

<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> 

Nota: Estoy usando XSLT 1.0 .

+0

que pertenece en su lista de entrada XML? –

+0

¿Cómo es el XML de entrada? ¿Los códigos de país son nodos de texto hijo o elementos o p. Ej. atributos? – jelovirt

Respuesta

1

Pruebe algo como, si su lista de países pertenece en su entrada XML:

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

O bien, si eso es estática, que podría ir con:

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

'' es redundante - es equivalente a '' . :-) – Tomalak

+0

buen consejo Tomalak, ty –

4

EDITAR

Tras la lectura su publicación nuevamente, creo que la versión original de mi respuesta (a continuación) no es así.

Usted tiene una lista ya - su declaración de variables selecciona un conjunto de nodos de todos los <country> nodos que son hijos de <Request> (un conjunto de nodos es el XSLT equivalente de un conjunto de discos/una lista):

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

Pero el punto es que ni siquiera necesita esa lista como una variable separada; todo lo que necesita es:

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

Dónde Request[country=$country] lee como "Dentro <Request>, mirar cada <country> y seleccionarla si es igual a $country." Cuando la expresión devuelve un conjunto de nodos vacío, $country está en la lista.

Que es, de hecho, lo que dijo Rubens Farias desde el principio. :)


Respuesta original, mantenida para el registro.

Si por "lista" que significa una cadena separada por comas de fichas:

<!-- 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>