La valeur de la variable $var telle que définie dans :
<xsl:variable name="var" select="boolean('false')"/>
est
true()
En effet, dans XPath, " false
" est une chaîne ordinaire, par opposition à false()
qui est le constructeur de l'objet boolean
valeur false()
Les deux valeurs booléennes dans XPath sont (notez qu'ils sont construits !) :
true()
y false()
Les détails de la conversion de n'importe quelle valeur en booléen sont expliqués dans le manuel de l'utilisateur. Spec XPath . :
"Le boolean convertit son argument en booléen comme suit :
-
un nombre est vrai si et seulement s'il n'est ni positif ni négatif zéro ni NaN
-
un ensemble de nœuds est vrai si et seulement s'il est non-vide
-
une chaîne est vraie si et seulement si son longueur est non nulle
-
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 du 3ème point 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écifier toute expression dont l'évaluation est 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()"/>
3 votes
Ce n'est qu'une suggestion, mais vous obtiendrez sans doute une réponse de meilleure qualité si vous écrivez votre titre comme une vraie question et si vous évitez le jargon.