¿Puedes poner dos condiciones en un atributo de prueba xslt?

Respuestas:

211

No del todo, el AND tiene que estar en minúsculas.

<xsl:when test="4 &lt; 5 and 1 &lt; 2">
<!-- do something -->
</xsl:when>
phihag
fuente
33

Tiene que estar envuelto en un <xsl: choose> ya que es un cuándo. Y en minúscula el "y".

<xsl:choose>
   <xsl:when test="4 &lt; 5 and 1 &lt; 2" >
   <!-- do something -->
   </xsl:when>
   <xsl:otherwise>
   <!-- do something else -->
   </xsl:otherwise>
</xsl:choose>
Aaron Palmer
fuente
6

De XML.com :

Al igual que las instrucciones xsl: if, xsl: cuando los elementos pueden tener contenidos más elaborados entre sus etiquetas de inicio y fin, por ejemplo, elementos de resultado literales, xsl: elementos de elemento, o incluso xsl: if y xsl: elija elementos para agregar a El árbol de resultados. Sus expresiones de prueba también pueden usar todos los trucos y operadores que puede usar el atributo de prueba xsl: if del elemento, como and, or, y llamadas a funciones, para construir expresiones booleanas más complejas.

Harper Shelby
fuente
5

Tal vez esto sea una obviedad para el xslt-professional, pero para mí a nivel principiante / intermedio, esto me dejó perplejo. Quería hacer exactamente lo mismo, pero tuve que probar un valor de respuesta de un xml en lugar de un número simple. Siguiendo este hilo, probé esto:

<xsl:when test="responsetime/@value &gt;= 5000 and responsetime/@value &lt;= 8999"> 

que generó un error Esto funciona:

<xsl:when test="number(responsetime/@value) &gt;= 5000 and number(responsetime/@value) &lt;= 8999">

Sin embargo, realmente no entiendo por qué no funciona sin número (). ¿Podría ser que sin número () el valor se trata como una cadena y no se pueden comparar números con una cadena?

De todos modos, espero que esto ahorre mucha búsqueda ...

Ted
fuente