Le test
spécifié dans <xsl:if>
fonctionne comme si elle appelle la fonction boolean
. Cette fonction ne fonctionne pas comme vous le pensez. Si son argument évalue à un ensemble de nœuds (ce qui sera le cas si vous utilisez un chemin comme argument), il retournera vrai si l'ensemble de nœuds n'est pas vide, et faux sinon. Donc, efficacement, vous testez l'existence d'un élément, pas sa valeur. Si foo
contient false
,
<xsl:if test="/path/to/foo">
évaluera toujours vrai, puisque ce que vous demandez vraiment dans ce test est « cet élément n'existe? » et non "la valeur de l'élément est-elle vraie?" Et l'élément existe.
La règle selon laquelle les valeurs booléennes doivent être true
, false
, 1
ou 0
est une partie du schéma XML (which see) et non XPath, qui ne sait rien au sujet de cette règle. (XPath 1.0, c'est-à-dire XPath 2.0/XQuery 1.0 a the fn:boolean
function, ce qui rend intelligent, ie le schéma XML, l'évaluation des valeurs booléennes.) Pour déterminer si une valeur est vraie dans XSLT, vous devez le vérifier explicitement:
<xsl:if test="/path/to/foo = 'true' or /path/to/foo = '1'">
pouvez-vous s'il vous plaît poster votre expression XPath actuelle avec un fragment XML? –
Ce n'est pas une question du tout. S'il vous plaît, donnez un exemple spécifique - quelle est exactement l'expression XPath et quel est le fichier XML (le plus simple possible, s'il vous plaît) sur lequel cette expression XPath est évaluée? –
Préfère voir un exemple, je suppose qu'il y a une erreur mineure dans la syntaxe. –