Comment savoir la variable a la valeur ou pas dans XSLT
Je suis entrain de créer le fichier XSLT.
J'ai une variable qui prennent de la valeur à partir du fichier XML.Mais il peut arriver qu'il n'y est fait aucune référence dans le xml pour la valeur et à l'époque XSL variable return False/Aucun(ne sait pas).Je veux garder la condition que,S'il n'y a pas de valeur pour la variable d'utiliser celui par défaut.
Comment faire ?
double possible de En XSLT comment faites-vous tester pour voir si une variable existe?
OriginalL'auteur DSS | 2010-11-18
Vous devez vous connecter pour publier un commentaire.
Avec le peu de détails donnés dans la question, le test le plus simple que vous pouvez faire est:
Ou vous pouvez utiliser
xsl:choose
si vous souhaitez fournir une sortie pour l'autre cas:Le deuxième exemple est également le cas à juste titre que la variable ou le paramètre n'a pas été fourni avec une valeur réelle, c'est à dire qu'il est égal à une chaîne vide. Cela fonctionne parce que
not('')
retournetrue
.test="$var != ''"
un peu mieux si les tests de contenu variable vs existence.Je seconde @scunliffe - si $var existe mais est vide,
test="$var"
renvoie toujours vrai. Toutefois, vous devrez peut-être l'écriretest="not($var = '')"
si vous utilisez des versions antérieures de XSL.Voir mon extension de réponse pour la manipulation des chaînes vides.
Vous avez écrit: aussi gérer le cas correctement que la variable n'a pas été réglé à tous. Il n'y a pas une telle chose dans le langage XSLT. Les Variables sont toujours "ensemble". Vérifier ma réponse.
Mon texte n'est pas précis, mais il est possible de ne pas sélectionner explicitement une valeur pour une variable ou le paramètre auquel cas la variable prendra une chaîne vide comme valeur par défaut.
OriginalL'auteur Dirk Vollmar
Vous n'avez pas expliqué ce que tu veux dire par "n'a pas de valeur". Ici est une solution générique:
Cette expression a pour
true()
iff$v
"n'a pas de valeur".Les deux conditions doivent être remplies, car une chaîne
$v
défini comme'0'
a une valeur, maisnot($v)
esttrue()
.En XSLT 1.0 en utilisant une valeur par défaut peut être réalisée de différentes manières, si la "valeur" est un node-set, ou si la valeur est un scalaire (comme une chaîne, un nombre ou un booléen).
@Alejandro fourni un moyen d'obtenir une valeur par défaut si une variable qui est censé contenir un node-set est vide.
Si la variable est censé contenir un scalaire, alors l'expression suivante retourne sa valeur (si elle a une valeur) ou (autre) souhaité par défaut:
Selon point 11. une variable être lié à une valeur. Si aucune valeur n'est explicitement prévu par un attribut ou le contenu de la variable d'élément de liaison, la troisième balle de point 11.2 s'applique à la liaison de la variable est une chaîne vide.
Pas de. C'est dire que
variable-binding element can specify the value of the variable in three alternative ways
, et la troisième voie estvariable-binding element has empty content and does not have a select attribute, then the value of the variable is an empty string
. Donc, il a une valeur définie. Il n'y a pas une telle chose comme sans valeur.Je suis à l'aide de l'OP de la terminologie...
Je sais que vous faites. C'était juste une... de rédaction de commentaire 😉
OriginalL'auteur Dimitre Novatchev
Vous pouvez utiliser
string-length
pour vérifier si une variable appelée$reference
par exemple contient quoi que ce soit.Si nécessaire, d'utiliser
normalize-space
, trop.OriginalL'auteur ceving
Tout d'abord, toutes les variables ont des valeurs, parce que XSLT appartient à déclaratif de paradigme: il n'y a pas de asignation instruction, mais lorsque vous déclarez la variable déclarant aussi l'expression de sa valeur.
Si cette valeur c'est un ensemble de nœuds de type de données (qui ressemble de votre question), alors vous devriez tester un nœud vide dans le cas rien n'a été sélectionné. Le efective valeur booléenne pour un vide de l'ensemble de nœuds est faux. Donc, comme @0xA3 a répondu:
test="$node-set"
.Vous avez écrit:
Bien, cela dépend de quel type de type de données que vous recherchez.
Supposons que le nœud défini type de données: si vous voulez $node-set-1 valeur ou $node-set-2 si $node-set-1 est vide, puis utilisez:
Bon point. J'ai lu cette phrase de cette façon:
I have one variable which take value from XML file
.OriginalL'auteur
J'ai essayé beaucoup de solution DONC, ma dernière solution a été prise à partir de @dimitre-novatchev, mais que l'on ne fonctionne pas à chaque fois. Récemment, j'ai trouvé la solution par hasard de google search, google a pensé à partager avec la communauté.
Afin de vérifier vide valeur de la variable, on peut déclarer une variable vide et comparer sa valeur par rapport à la condition de test. Voici un extrait de code:
Ici testVariableValue maintiennent la valeur de la nouvelle variable à tester pour vide
scénario.
L'espoir que cela aiderait à essai vide la variable d'état.
OriginalL'auteur Sudip7