2012-02-01 37 views
5
<xsl:variable name="a">20</xsl:variable> 
    <xsl:variable name="b">10</xsl:variable> 

     <xsl:if test="($a) > ($b)"> 
     ------ 
    </xsl:if> 

que conseguir error en el caso de condion ..¿Cómo ver qué variable es mayor en xsl?

+0

se ve bien para mí. Ni libxslt ni Transformiix muestran un error. – Saxoier

+0

útil @user_nums –

Respuesta

5

Pruebe las siguientes:

<xsl:if test="$a &gt; $b"> 

Trate de usar las entidades de caracteres para > (& gt;) y < (& lt;) los operadores de expresiones; de lo contrario, algunos analizadores creen que está cerrando la etiqueta antes de tiempo o abriendo otra.

+0

No tiene que escapar '>'. Es absolutamente posible usar '$ a> $ b'. – Saxoier

+0

Tiene razón, el analizador XSLT que utilicé hace muchas lunas me puso en la práctica de escapar de ellos para evitar errores del analizador. Acabo de comprobar ahora y tu código funciona bien. Aprendo algo nuevo todos los días, ¡gracias! –

5

El ejemplo que publicó debería funcionar. Sin embargo, no debería ser que en su caso ambas variables sean de tipo cadena, lo que podría dar resultados sorprendentes cuando su longitud difiere. El comportamiento del operador de comparación en diferentes tipos de datos se especifica en el xpath spec on booleans.

Para evitar esto se podría declarar las variables con el atributo select o manualmente convertirlos a number para la comparación:

<xsl:variable name="a" select="20"/> 
<xsl:variable name="b" select="10"/> 
... 
<xsl:if test="number($a) > number($b)"> 
</xsl:if> 
+1

"Cuando ninguno de los objetos a comparar es un conjunto de nodos y el operador es <=, <, > = o>, los objetos se comparan convirtiendo ambos objetos en números y comparando los números de acuerdo con IEEE 754." - Sin comportamiento indefinido. – Saxoier

+0

@Saxoier: Tiene razón, el párrafo que precede a su cita solo se aplica a los operadores '=' y '! ='. –