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.

War es hilfreich?

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')]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top