Wie auf alle Elemente ohne ein bestimmtes Attribut mit XPath filtern
Frage
Meine XPath ist ein wenig rostig ... Lassen Sie uns sagen, ich habe diese einfache XML-Datei:
<?xml version="1.0" encoding="utf-8" ?>
<States xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<States>
<StateProvince name="ALABAMA" abbrev="AL" />
....
<StateProvince name="AMERICAN SAMOA" abbrev="AS" territory="true" />
</States>
</States>
Ich möchte eine einfache XPath-Abfrage ausführen, um alle die wahren Zustände zu analysieren, (so ziehen Sie nicht in Staaten, in denen Territorium = true). Ich habe versucht, \ Stateprovince [@territory! = 'True'], aber ich habe Null. Andere Varianten scheinen scheitern. Dies scheint, wie es sollte einfach sein, aber nicht zu finden, was ich will.
Jede Hilfe sehr geschätzt.
Lösung
Ein XPath-Ausdruck, um die gewünschten Elemente wählt:
/*/States/StateProvince[not(@territory='true')]
Hinweis: , die muss man die //
Abkürzung vermeiden, wann immer möglich, da es das gesamte Dokument (Baum, der an dem Kontextknoten verwurzelt) verursacht zu scannende .
Der obige XPath-Ausdruck vermeidet die Verwendung der //
Abkürzung unter Berücksichtigung die Struktur des ursprünglich bereitgestellten XML-Dokuments.
Nur wenn die Struktur des XML-Dokuments vollständig unbekannt ist (und der XPath-Ausdruck sollte accross viele XML-Dokumente mit unbekannter Struktur verwendet werden) sollte die Verwendung der //
Abkürzung sein betrachtet .
Andere Tipps
Sie sind ganz in der Nähe:
//StateProvince[not(@territory) or @territory != 'true']
Wenn Sie erhält das gewünschte Ergebnis.
Dies sollte funktionieren:
//StateProvince[not(@territory='true')]