Il valore della variabile $ var come definito in:
<xsl:variable name="var" select="boolean('false')"/>
è
true()
Questo perché in XPath " false
" è una stringa normale, al contrario di false()
, che è il costruttore del boolean
valorefalse()
I due valori booleani in XPath sono (nota che sono costruiti!):
true()
e false()
I dettagli della conversione di qualsiasi valore in booleano sono indicati nelle specifiche XPath .:
"La funzione booleana converte il suo argomento in un booleano come segue:
un numero è vero se e solo se non è né zero né positivo né negativo né NaN
un insieme di nodi è vero se e solo se non è vuoto
una stringa è vera se e solo se la sua lunghezza è diversa da zero
un oggetto di un tipo diverso dai quattro tipi di base viene convertito in un booleano in un modo che dipende da quel tipo "
Nel tuo caso la stringa "false" non è il numero 0 e ha una lunghezza positiva, quindi viene applicata la regola nel 3 ° punto sopra, cedendo true()
.
Pertanto, per definire una variabile in XSLT 1.0, il cui valore è false()
, è necessario scrivere la definizione come segue:
<xsl:variable name="vMyVar" select="false()"/>
oppure, se non ricordi esattamente questo, potresti sempre scrivere:
<xsl:variable name="vMyVar" select="1 = 0"/>
(specificare qualsiasi espressione che restituisce false()
) e il processore XSLT farà il lavoro per te.
In XSLT 2.0 è sempre meglio specificare esplicitamente il tipo di variabile:
<xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>