Comment créer une valeur booléenne?

Je suis totalement nouveau sur XSLT et je ne peux pas me tromper avec le code suivant.

 variable is true 

Cela revient toujours vrai quand il est censé être faux. Pourquoi?

La valeur de la variable $ var définie dans:

est

true()

C’est parce que dans XPath ” false ” est une chaîne ordinaire, par opposition à false() , qui est le constructeur de la valeur boolean false()

Les deux valeurs booléennes dans XPath sont (notez qu’elles sont construites!):

true() et false()

Le détail de la conversion de n’importe quelle valeur en booléen est épelé dans la spécification XPath :

“La fonction booléenne convertit son argument en booléen comme suit:

  • un nombre est vrai si et seulement si ce n’est ni positif ni négatif, 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 sa longueur est différente de zéro

  • un object d’un type autre que les quatre types de base est converti en un 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 3è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:

ou, si vous ne vous en souvenez pas exactement, vous pouvez toujours écrire:

(spécifiez toute expression dont la valeur 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:

La fonction booléenne () que vous utilisez fait bien son travail. Pour utiliser des valeurs vraies et fausses explicites, vous devez utiliser les fonctions suivantes:

   

Juste FYI, selon la documentation MSDN , boolean () renvoie les éléments suivants:

  • Si l’argument est un nombre négatif ou positif, il est converti en valeur booléenne true.
  • Si l’argument est zéro ou une valeur NaN, il est converti en false.
  • Si l’argument est un ensemble de nœuds non vide, il est converti en true. Un ensemble de noeuds vide est converti en false.
  • Si l’argument est une chaîne non vide, il est converti en true . Une chaîne vide est convertie en false.
  • Si l’argument est un object d’un type autre que les quatre types de base, il est converti en un booléen dépendant de ce type.

Un peu en retard à ce stade peut-être, mais imo ne traite pas les booléens. Voici comment j’ai traité un booléen (obligatoire) qui revenait de la DB:

    Mandatory     

J’espère que cela aide quelqu’un