Comment utiliser la fonction somme dans XPath?
J'ai un fichier xml avec le contenu suivant:
<Xavor>
<Dev>
<Emp>1</Emp>
<Floor>1</Floor>
<Salary>1200.4</Salary>
</Dev>
<Dev>
<Emp>2</Emp>
<Salary>3100.8</Salary>
</Dev>
<Dev>
<Emp>3</Emp>
<Floor>1</Floor>
</Dev>
Je veux calculer la somme des salaires des deux premiers Employés en utilisant la fonction somme. Je suis venu à cette XPath:
sum(/Xavor/Dev[2]/Salary/text())
Mais cela renvoie seulement à la deuxième valeur du salaire de ie 3100.8
!!!
Cette XPath fonctionnait bien quand il n'y avait que les non-nombres en virgule flottante ont été dans les salaires. Merci de m'aider.
Si vous pensez que cette XPath était en train de faire ce que vous demandez, avant, vous vous êtes trompés. Il a clairement ne sélectionne que la deuxième Dev élément, plutôt que de sélectionner les deux premiers.
Il fonctionnait bien, MAIS avec seulement Non-nombres en virgule Flottante.
Il fonctionnait bien, MAIS avec seulement Non-nombres en virgule Flottante.
OriginalL'auteur Azeem | 2011-11-02
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Salary
de l'information?Si vous faites des tests à l'expression XPath dans Altova XMLSpy, vous n'avez pas besoin de changer de balisage dans les références de caractère. Bien sûr, si vous ne le faites pas dans XSLT ou Stylevision ou que ce soit, qui serait nécessaire. Aussi, les employés sont toujours dans l'ordre ou avez-vous besoin d'ordonnance par
Emp
éléments? Je l'ai essayé comme ça, avec succès:sum(/*/Dev[Emp <= 2 and Salary]/Salary)
G_H merci pour votre réponse détaillée. Je m'excuse que je suis débutant de XPath donc, ce nouveau XPath est difficile pour moi de comprendre en ce moment. Il travaille avec un bon de sortie. merci 🙂
OriginalL'auteur Rubens Farias
En plus de la bonne réponse par @Rubens Farias, si vous voulez faire la somme des salaires de tous les
Dev
qui ont (numérique) salaires spécifié, utilisez:sum(/*/Dev/Salary[string(number(.)) != 'NaN'])
)Pourriez-vous m'expliquer (ou point d'une url) comment le [nombre(.) = nombre(.)] des œuvres. Je m'attends à elle, si trouvé un NaN également de match. Merci
Je pense que je l'ai eu. NaN = NaN est jamais vraie, et donc le nombre(.) = nombre(.) fonctionne lorsque le nœud est convertible en un nombre.
Exactement. Par définition, NaN n'est pas égal à tout autre, y compris NaN
OriginalL'auteur Dimitre Novatchev