Pouvez-vous mettre deux conditions dans un attribut de test xslt?

Réponses:

211

Pas tout à fait, le AND doit être en minuscules.

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

Il doit être enveloppé dans un <xsl: choose> car c'est un quand. Et mettez en minuscules le "et".

<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
la source
6

Depuis XML.com :

Comme les instructions xsl: if, xsl: when les éléments peuvent avoir un contenu plus élaboré entre leurs balises de début et de fin - par exemple, des éléments de résultat littéraux, des éléments xsl: element ou même des éléments xsl: if et xsl: choose elements - à ajouter l'arbre des résultats. Leurs expressions de test peuvent également utiliser toutes les astuces et opérateurs que l'attribut test de l'élément xsl: if peut utiliser, tels que et, ou, et les appels de fonction, pour créer des expressions booléennes plus complexes.

Harper Shelby
la source
5

C'est peut-être une évidence pour le xslt-professionnel, mais pour moi au niveau débutant / intermédiaire, cela m'a laissé perplexe. Je voulais faire exactement la même chose, mais je devais tester une valeur responsetime à partir d'un xml au lieu d'un nombre simple. Suite à ce fil, j'ai essayé ceci:

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

qui a généré une erreur. Cela marche:

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

Cependant, je ne comprends pas vraiment pourquoi cela ne fonctionne pas sans number (). Se pourrait-il que sans nombre () la valeur soit traitée comme une chaîne et que vous ne puissiez pas comparer les nombres avec une chaîne?

Quoi qu'il en soit, j'espère que cela permettra à quelqu'un d'économiser beaucoup de recherches ...

Ted
la source