Wie finden Sie das max-Attribut aus einem XML-Dokument mittels Xpath 1.0
Gibt es eine Möglichkeit eine Abfrage an einer XML-Dokument zurück, das maximum von einem bestimmten Attribut mit Xpath 1.0 ?
Zum Beispiel ist es ein Weg, um die 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 für das Ananas:P
- Was ist dein host-Sprache für die Ausführung der XPath? Wenn Sie die Verwendung von XPath 1.0 (welches nicht über eine
max
- Funktion), dann ist es wahrscheinlich schneller, um wählen Sie alle Elemente, die erste und die finden das max in deinem PL. - Ich bin mit Perl 5.10.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In XPath 2.0, verwenden Sie die
max
Funktion. Zu finden ist das Buch mit der höchstenid
tunDen folgenden XPath-wählt das Buch mit der höchsten id:
Wenn Sie bereit sind, für die Nutzung externer Werkzeuge - welche, hängt von Ihrer Umsetzung mit Implementierungen dieser Werkzeuge versuchen, die EXSLT:Math Funktion
highest()
.Die Tatsache, dass EXSLT implementiert dies impliziert, dass eine solche Funktion nicht direkt verfügbar im einfachen xpath -, natürlich. Wenn Sie nicht mit Verwandelt, oder wollen-stick rein mit Standard-konformen markup, andere Poster' Vorschläge wäre die bessere Wahl.
Hinweis: Die folgenden Informationen wird davon ausgegangen Verwendung von XPath 1.0.
Folgende Ausdruck gibt das element(s) mit dem größten
id
Wert:Beachten Sie, dass dies ist etwas anders als @timbooo die Antwort, dass dies wieder mehr als ein element, wenn es Duplikate sind mit den gleichen max-Wert (@timbooo würde zurück "none"). Wenn Sie möchten, dass nur ein element in diesem Fall, dann benötigen Sie eine Auflösung Strategie. Wählen Sie das erste element in der dokumentenreihenfolge, verwenden Sie diese:
Wählen Sie die last, benutzen Sie dies:
Dieser Ansatz ist sehr ineffizient (
O(n^2)
), weil es erfordert, dass Sie zu vergleichen, jedes element zu jedem anderen möglichen max. Aus diesem Grund ist es wahrscheinlich am besten verwenden Sie Ihre host-Programmiersprache, wählen Sie das maximale element. Wählen Sie einfach allebook
Elemente zuerst und dann wählen Sie die max aus, die Liste. Dies ist (wahrscheinlich) eine lineare operation (O(n)
), die wäre deutlich schneller auf sehr großen Dokumenten. Zum Beispiel, in Java (JAXP) man könnte es so machen:Beachten Sie, dass dies nur eine demonstration; sicher sein, um null-checks, bei denen entsprechende.
Habe ich festgestellt, dass Antworten wie die lwburk oder timbooo s funktionieren Attributen, die Zahl mit nur einer Ziffer. Allerdings, wenn das Attribut eine Zahl mit mehr als einer Ziffer, extrange Dinge scheinen zu geschehen, wenn der Vergleich zwischen Attributwerten.
Zum Beispiel, versuchen Sie, die ursprünglichen XML-Daten mit so etwas wie dies:
Läuft die vorgeschlagene snippets nicht funktionieren. Ich habe eine Lösung mit der casting-operator xs:int() angewendet auf id-Attribut, wie in:
Geben die richtige Antwort!
Dieses Beispiel kann verwendet werden, um zu finden, die max.
Für andere ähnlichen Themen, die auf xpath und linq-check-out http://rmanimaran.wordpress.com/2011/03/20/xml-find-max-and-min-value-in-a-attribute-using-xpath-and-linq/