Czy możesz umieścić dwa warunki w atrybucie testowym xslt?

Odpowiedzi:

211

Niezupełnie, AND musi być zapisane małymi literami.

<xsl:when test="4 &lt; 5 and 1 &lt; 2">
<!-- do something -->
</xsl:when>
phihag
źródło
33

Musi być opakowany w <xsl: choose>, ponieważ jest to kiedy. I małe litery „i”.

<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
źródło
6

Z XML.com :

Podobnie jak xsl: if instrukcje, xsl: kiedy elementy mogą mieć bardziej złożoną zawartość między swoimi znacznikami początkowymi i końcowymi - na przykład elementy wyników literału, elementy xsl: element, a nawet xsl: if i xsl: wybierz elementy - do dodania drzewo wyników. Ich wyrażenia testowe mogą również wykorzystywać wszystkie sztuczki i operatory, których może używać atrybut test elementu xsl: if, takie jak and, or i wywołania funkcji, do tworzenia bardziej złożonych wyrażeń boolowskich.

Harper Shelby
źródło
5

Może to oczywiste dla xslt-professional, ale dla mnie na poziomie początkującym / średniozaawansowanym to mnie zdziwiło. Chciałem zrobić dokładnie to samo, ale musiałem przetestować wartość czasu odpowiedzi z pliku XML zamiast zwykłej liczby. Podążając za tym wątkiem, spróbowałem tego:

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

co spowodowało błąd. To działa:

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

Jednak naprawdę nie rozumiem, dlaczego to nie działa bez number (). Czy to możliwe, że bez parametru number () wartość jest traktowana jako ciąg znaków i nie można porównywać liczb z łańcuchem?

W każdym razie, mam nadzieję, że zaoszczędzi to komuś dużo czasu na szukaniu ...

Przetrząsać
źródło