Ajouter deux valeurs dans xslt que, parfois, peut être null
Je voudrais ajouter des valeurs à partir d'un xml à un autre à l'aide de xslt. Je suis à l'aide de xml version 1.
<xsl:value-of select="number(/fields/field[@name='value1'])+number(/fields/field[@name='value2'])"/>
Comment pourrais-je le faire si valeur1 ou valeur2 parfois vide et de produire et de NaN?
Je sais que je peux l'utiliser, et quand, à voir si valeur1 ou valeur2 n'est pas vide, mais disons que je ne peux pas vérifier. Comment pourrais-je résoudre ce problème?
Ce que je voudrais faire est si "nombre(/domaines/domaine[@name='valeur2'])" serait de produire un NaN, il devrait être le numéro 0, il pourrait fonctionner.
Cordialement
Joe
Pourquoi voudriez-vous pas être en mesure de "vérifier"?
Ma solution a été de traduire(nombre(/domaines/domaine[@name='valeur1']),'NaN',") pour la future référence.
Ma solution a été de traduire(nombre(/domaines/domaine[@name='valeur1']),'NaN',") pour la future référence.
OriginalL'auteur Joe | 2014-02-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer quelque chose comme ceci:
Remarque: la mise en forme utilisée dans l'exemple suppose une entrée entière.
OriginalL'auteur michael.hor257k
@michael.hor257k a déjà donné une solution correcte - s'il vous plaît accepter son réponse. C'est juste pour contribuer à une illustration de la méthode.
Comme vous pouvez le voir, l'utilisation de
format-number
fait le même effet qu'une communexsl:choose
de décider si le contenu defield
est un nombre ou non (il semble que vous expressément décidé contre l'utilisation dexsl:choose
).XML d'entrée
Feuille de style
Sortie
Pas de différence si l'un d'eux est vide, si je ne me trompe pas.
-résultat sera 0, b sera de 5. N'est-ce pas ce que vous obtenez?
Ah, vous avez raison. Je pense que j'ai mal compris l'OP de l'intention. Actuellement, si l'un des deux champs est vide, l'intégralité de la somme est 0 au lieu de juste en sortie la valeur de l'autre champ. Je vais modifier mon post.
Il a été plus facile que d'utiliser traduire(valeur1,'NaN','0')
OriginalL'auteur Mathias Müller
J'ai trouvé cela fonctionne pour la situation particulière dans laquelle vous êtes certain que chaque nœud peut contenir un nombre valide ou le nœud sera absent.
Cela crée un node-set par fusion les deux champs, puis additionne les nœuds dans le node-set. Si un nœud n'est pas, il sera omis dans le node-set et ne cause pas de
NaN
. Si tous les nœuds sont manquants, il sera de retour0
.Limitations qui sont présent mais vide nœuds cause
NaN
, tout comme les nœuds qui contiennent du texte.OriginalL'auteur Malvineous
Vous pouvez essayer le xpath
boolean(nombre(//nombre1))
qui retourne true si la valeur est un nombre.
Vous pouvez créer une variable qui stocke la valeur convertisseur ou 0 (si c'est NAN) et ensuite faire la somme (sotty pour mon anglais)
OriginalL'auteur bdn02