Können Sie einem xslt-Testattribut zwei Bedingungen hinzufügen?

Antworten:

211

Nicht ganz, das UND muss in Kleinbuchstaben geschrieben werden.

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

Es muss in ein <xsl: select> eingeschlossen werden, da es ein Wann ist. Und Kleinbuchstaben das "und".

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

Von XML.com :

Wie xsl: if-Anweisungen, xsl: when-Elemente können detailliertere Inhalte zwischen ihren Start- und End-Tags enthalten, z. B. wörtliche Ergebniselemente, xsl: element-Elemente oder sogar xsl: if und xsl: select-Elemente, die hinzugefügt werden sollen der Ergebnisbaum. Ihre Testausdrücke können auch alle Tricks und Operatoren verwenden, die das Testattribut xsl: if-Element verwenden kann, z. B. und, und und Funktionsaufrufe, um komplexere boolesche Ausdrücke zu erstellen.

Harper Shelby
quelle
5

Vielleicht ist dies ein Kinderspiel für den xslt-Profi, aber für mich als Anfänger / Fortgeschrittene hat mich das verwirrt. Ich wollte genau das Gleiche tun, musste aber einen Antwortzeitwert aus einer XML-Datei anstelle einer einfachen Zahl testen. Nach diesem Thread habe ich Folgendes versucht:

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

was einen Fehler erzeugte. Das funktioniert:

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

Verstehe aber nicht wirklich, warum es ohne number () nicht funktioniert. Könnte es sein, dass der Wert ohne number () als Zeichenfolge behandelt wird und Sie keine Zahlen mit einer Zeichenfolge vergleichen können?

Wie auch immer, ich hoffe, das erspart jemandem viel Suche ...

Ted
quelle