Можете ли вы указать два условия в атрибуте теста xslt?

Ответы:

211

Не совсем так, AND должно быть в нижнем регистре.

<xsl:when test="4 &lt; 5 and 1 &lt; 2">
<!-- do something -->
</xsl:when>
phihag
источник
33

Он должен быть заключен в <xsl: choose>, поскольку это когда. И строчные буквы «и».

<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>
Аарон Палмер
источник
6

С XML.com :

Подобно инструкциям xsl: if, xsl: when элементы могут иметь более сложное содержимое между их начальными и конечными тегами - например, буквальные элементы результата, элементы xsl: element или даже элементы xsl: if и xsl: choose - для добавления к результирующее дерево. Их тестовые выражения также могут использовать все уловки и операторы, которые может использовать атрибут xsl: if элемента test, такие как and, or и вызовы функций, для построения более сложных логических выражений.

Харпер Шелби
источник
5

Может быть, для xslt-профессионала это не проблема, но для меня на начальном / среднем уровне это озадачило меня. Я хотел сделать то же самое, но мне пришлось протестировать значение времени отклика из xml вместо простого числа. Следуя этой теме, я попробовал это:

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

что вызвало ошибку. Это работает:

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

Не совсем понимаю, почему это не работает без number (). Может ли быть, что без number () значение обрабатывается как строка, и вы не можете сравнивать числа со строкой?

В любом случае, надеюсь, это избавит кого-то от многих поисков ...

Тед
источник