Respostas:
Ele precisa ser envolvido em um <xsl: choose>, pois é quando. E minúsculas o "e".
<xsl:choose>
<xsl:when test="4 < 5 and 1 < 2" >
<!-- do something -->
</xsl:when>
<xsl:otherwise>
<!-- do something else -->
</xsl:otherwise>
</xsl:choose>
Do XML.com :
Como instruções xsl: if, xsl: when elementos podem ter conteúdo mais elaborado entre suas tags de início e fim - por exemplo, elementos de resultado literais, elementos xsl: element ou até xsl: if e xsl: if e xsl: escolha elementos - para adicionar a a árvore de resultados. Suas expressões de teste também podem usar todos os truques e operadores que o atributo de teste do elemento xsl: if pode usar, como e, ou, e, e chamadas de função, para criar expressões booleanas mais complexas.
Talvez este seja um acéfalo para o profissional xslt, mas para mim no nível iniciante / intermediário, isso me deixou intrigado. Eu queria fazer exatamente a mesma coisa, mas tive que testar um valor de tempo de resposta de um xml em vez de um número simples. Após esta discussão, tentei o seguinte:
<xsl:when test="responsetime/@value >= 5000 and responsetime/@value <= 8999">
o que gerou um erro. Isso funciona:
<xsl:when test="number(responsetime/@value) >= 5000 and number(responsetime/@value) <= 8999">
Realmente não entendo por que não funciona sem number (). Será que sem number () o valor é tratado como uma string e você não pode comparar números com uma string?
De qualquer forma, espero que isso poupe a alguém muita pesquisa ...