La valeur de la variable $ var telle que définie dans:
<xsl:variable name="var" select="boolean('false')"/>
est
true()
C'est parce que dans XPath " false
" est une chaîne ordinaire, par opposition à false()
, qui est le constructeur de la boolean
valeurfalse()
Les deux valeurs booléennes dans XPath sont (notez qu'elles sont construites!):
true()
et false()
Les détails de la conversion de toute valeur en booléen sont énoncés dans les spécifications XPath .:
"La fonction booléenne convertit son argument en booléen comme suit:
un nombre est vrai si et seulement s'il n'est ni zéro positif ou négatif ni NaN
un ensemble de nœuds est vrai si et seulement s'il n'est pas vide
une chaîne est vraie si et seulement si sa longueur est différente de zéro
un objet d'un type autre que les quatre types de base est converti en booléen d'une manière qui dépend de ce type "
Dans votre cas, la chaîne "false" n'est pas le nombre 0 et a une longueur positive, donc la règle de la troisième puce ci-dessus est appliquée, ce qui donne true()
.
Par conséquent, pour définir une variable dans XSLT 1.0, dont la valeur est false()
, il faut écrire la définition comme suit:
<xsl:variable name="vMyVar" select="false()"/>
ou, si vous ne vous en souvenez pas exactement, vous pouvez toujours écrire:
<xsl:variable name="vMyVar" select="1 = 0"/>
(spécifiez toute expression qui donne la valeur false()
) et le processeur XSLT fera le travail pour vous.
Dans XSLT 2.0, il est toujours préférable de spécifier explicitement le type de la variable:
<xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>