2012-02-01 11 views

risposta

5

provare le seguenti:

<xsl:if test="$a &gt; $b"> 

provare a utilizzare l'entità carattere per > (& gt;) e < (& lt;) operatori espressioni, altrimenti alcuni parser pensano che stai chiudendo il tag in anticipo o aprendo un altro.

+0

Non è necessario eseguire l'escape '>'. È assolutamente possibile usare '$ a> $ b'. – Saxoier

+0

Hai ragione, il parser XSLT che ho usato molte lune fa mi ha fatto fare pratica di evitarli per evitare errori di parser. Appena controllato ora e il tuo codice funziona bene. Imparo qualcosa di nuovo ogni giorno, grazie! –

5

L'esempio pubblicato dovrebbe funzionare. Tuttavia, non si dovrebbe che nel tuo caso entrambe le variabili sono di tipo stringa che potrebbe dare risultati sorprendenti dove la loro lunghezza è diversa. Il comportamento dell'operatore di confronto su diversi tipi di dati è specificato nello xpath spec on booleans.

per evitare questo si poteva dichiarare le variabili utilizzando l'attributo select o manualmente convertirli in number per il confronto:

<xsl:variable name="a" select="20"/> 
<xsl:variable name="b" select="10"/> 
... 
<xsl:if test="number($a) > number($b)"> 
</xsl:if> 
+1

"Quando nessuno dei due oggetti da confrontare è un set di nodi e l'operatore è <=, <, > = o>, gli oggetti vengono confrontati convertendo entrambi gli oggetti in numeri e confrontando i numeri secondo IEEE 754." - Nessun comportamento indefinito. – Saxoier

+0

@Saxoier: hai ragione, il paragrafo che precede la tua citazione si applica solo agli operatori '=' e '! ='. –

Problemi correlati