Você pode colocar duas condições em um atributo de teste xslt?

Respostas:

211

Não é bem assim, o AND deve ser minúsculo.

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

Ele precisa ser envolvido em um <xsl: choose>, pois é quando. E minúsculas o "e".

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

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.

Harper Shelby
fonte
5

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 &gt;= 5000 and responsetime/@value &lt;= 8999"> 

o que gerou um erro. Isso funciona:

<xsl:when test="number(responsetime/@value) &gt;= 5000 and number(responsetime/@value) &lt;= 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 ...

Ted
fonte