Можете ли вы поместить два условия в атрибут test xslt?

Правильно ли это, когда 4 < 5 и 1 < 2?

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

Ответ 1

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

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

Ответ 2

Он должен быть завернут в < xsl: выберите > так как это когда. И в нижнем регистре "и".

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

Ответ 3

От XML.com:

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

Ответ 4

Возможно, это непросто для профессионала xslt, но для меня на начальном/промежуточном уровне это меня озадачило. Я хотел сделать то же самое, но мне нужно было проверить значение responsetime из 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() значение обрабатывается как строка, и вы не можете сравнивать числа со строкой?

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