Comment trouver le max d'attributs à partir d'un document XML à l'aide de Xpath 1.0
Est-il un moyen de la requête d'un document XML pour retourner la valeur maximale d'un attribut donné à l'aide de Xpath 1.0 ?
Par exemple, est-il un moyen pour obtenir le max id ?
<?xml version="1.0" encoding="utf-8"?>
<library>
<book id="2" name="Dragon Tatoo"/>
<book id="7" name="Ender's Game"/>
<book id="3" name="Catch 22"/>
<book id="1" name="Lord of the rings"/>
</library>
+1, pour l'ananas:P
Quelle est votre langue d'accueil pour l'exécution de la XPath? Si vous êtes à l'aide de XPath 1.0 (qui n'ont pas de
Je suis à l'aide de Perl 5.10.
Quelle est votre langue d'accueil pour l'exécution de la XPath? Si vous êtes à l'aide de XPath 1.0 (qui n'ont pas de
max
fonction), alors il est probablement plus rapide pour sélectionner tous les éléments de la première et de trouver le max dans votre PL.Je suis à l'aide de Perl 5.10.
OriginalL'auteur HerbSpiral | 2012-01-02
Vous devez vous connecter pour publier un commentaire.
Dans XPath 2.0, utilisez le
max
fonction. Pour trouver le livre avec la plus grandeid
, nehmm. Essayé ceci dans XQilla XPath 1.0 compat mode et il fonctionne, mais peut-être que ce n'est pas vraiment XPath 1.0.
OriginalL'auteur Fred Foo
Le XPath suivante sélectionne le livre avec la plus grande id:
+1 - j'ai répété le cœur de votre réponse, mais je voulais juste apporter de l'information supplémentaire dans ma réponse, y compris certains de ce qui a été dispersées dans les commentaires.
Pas de problème 😉
Ne fonctionne pas si tous les éléments ont la même valeur
OriginalL'auteur timbooo
Si vous êtes prêt à utiliser des outils qui dépend de votre mise en œuvre, mettant en vedette les implémentations de ces outils, essayez le EXSLT:Mathématiques fonction
highest()
.Le fait que EXSLT implémente cela implique qu'une telle fonctionnalité n'est pas directement disponible dans la plaine, xpath, bien sûr. Si vous n'êtes pas à l'aide de Transformations, ou de vouloir s'en tenir purement conforme aux normes de balisage, d'autres affiches suggestions serait un meilleur choix.
OriginalL'auteur Tom W
Remarque: Les informations suivantes supposent l'utilisation de XPath 1.0.
L'expression suivante retourne le ou les élément(s) avec le plus grand
id
valeur:Noter que c'est légèrement différente de celle de @timbooo de la réponse, en ce que ce sera le retour de plus d'un élément lorsqu'il y a des doublons avec la même valeur max (@timbooo serait de retour aucun). Si vous souhaitez qu'un élément dans ce cas, alors vous avez besoin d'une stratégie de résolution. Pour choisir le premier élément dans l'ordre du document, utilisez ceci:
De choisir la dernière, utilisez ceci:
Cette approche est très inefficace (
O(n^2)
), parce qu'il vous oblige à comparer chaque élément à chaque autre potentiel max. Pour cette raison, il est probablement préférable d'utiliser votre hôte langage de programmation pour sélectionner l'élément maximum. Sélectionnez simplement tous lesbook
éléments d'abord, puis choisissez le max à partir de cette liste. C'est (probablement) une opération linéaire (O(n)
), ce qui serait nettement plus rapidement sur des documents très volumineux. Par exemple, en Java (JAXP), vous pouvez le faire comme ceci:Remarque que c'est juste une démonstration; assurez-vous d'inclure null-vérifie, le cas échéant.
OriginalL'auteur Wayne Burkett
J'ai trouvé que des réponses comme la lwburk ou timbooo du beau travail pour les attributs de représenter les nombres ayant un seul chiffre. Toutefois, si l'attribut est un nombre ayant plus d'un chiffre, extrange les choses semblent se produire lors de la comparaison entre les attributs des valeurs.
Par exemple, essayez de modifier les données XML d'origine avec quelque chose comme ceci:
De l'exécution de l'suggéré les extraits ne sont pas de travail. J'ai une solution à l'aide de l'opérateur de coulée xs:int() appliquée sur l'attribut id, comme dans:
Qui donnera la bonne réponse!
OriginalL'auteur Ricardo
Cet exemple peut être utilisé pour trouver le max.
Pour d'autres sujets similaires sur xpath et linq découvrez http://rmanimaran.wordpress.com/2011/03/20/xml-find-max-and-min-value-in-a-attribute-using-xpath-and-linq/
OriginalL'auteur Jpepper