2011-03-28 13 views
7

Tengo una concatenación de AND y OR para 2 variables diferentes. Intenté lo siguiente:Condicional O O dos valores diferentes

<xsl:if test="$countryCode = '104' 
       and 
       (transactionType != 'Allowance' 
       or 
       revenueCenter != '1100')"> 

Pero eso no funciona. ¿Es posible hacer una prueba condicional o tengo que dividir así:

<xsl:if test="$countryCode='104'> 

y en un segundo elemento que hago:

<xsl:if transactionType!='Allowance' or revenueCenter!='1100'> 

busqué en Internet, pero no pudo encontrar cualquier sugerencia sobre esto ¿Alguien podría ayudarme a encontrar una solución, por favor? Gracias y un saludo, Peter

+0

¿Cuál es transactionType y revenueCenter? Puede haber un problema con la referencia de la variable (¿por qué no usar $?) El segundo enfoque es incorrecto – HamoriZ

+0

¿Cómo es que "no funciona"? ¿Estás obteniendo algún resultado? si es así, ¿cómo difieren de lo que esperabas? –

+0

Hola Zoltan, las referencias están bien. Los revisé al mostrarlos en un elemento . Se supone que debe crearse un determinado elemento XML si countryCode coincide con 104 y una de las otras condiciones es verdadera (sin "Tolerancia" y sin "1100" en las respectivas referencias). Estoy probando con la función "contiene". Quizás obtengo el resultado deseado. – Peter

Respuesta

10

La expresión XPath:

$countryCode='104' 
    and 
    (transactionType!='Allowance' or revenueCenter!='1100') 

es sintácticamente correcta.

No podemos decir nada acerca de la semántica, ya que no se proporciona ningún documento XML y no hay explicación sobre qué expresión debe seleccionar.

Como de costumbre, no es la recomendación de no Ose el operador !=, a menos que realmente necesario - su uso cuando uno de los argumentos es un conjunto de nodos (o secuencia o conjunto de nodos en XPath 2.0) es muy lejos de lo que la mayoría de la gente espera

En lugar de != un mejor uso de la función not():

$countryCode='104' 
and 
    (not(transactionType='Allowance') or not(revenueCenter='1100')) 

y esto aún se puede refactorizar a la más corta y equivalentes:

$countryCode='104' 
and 
    not(transactionType='Allowance' and revenueCenter='1100') 
+0

Hola Dimitre, muchas gracias por esta respuesta. No sabía del problema con el operador "! =". Lo he estado usando mucho pero intentaré usar "not()" en el futuro. Intenté con tu último código de ejemplo y funciona perfectamente, ¡gracias! – Peter

+0

La principal diferencia es que si no hay transactionType, 'transactionType! = 'Allowance'' devuelve falso, mientras' not (transactionType =' Allowance ') 'devuelve true. En el futuro, proporcione un código fuente XML para que sea más fácil ayudarle. –

+0

@Peter: De nada. No pude responder de inmediato porque estaba ocupado leyendo el artículo de XML Prague de @Michael Kay sobre la implementación de XSLT 2.0 en el navegador: ¡¡¡cosas geniales !!! –

Cuestiones relacionadas