In Anbetracht dieser XML gibt XPath alle Elemente zurück, deren prop
-Attribut Foo
enthält (die ersten drei Knoten):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
//a[contains(@prop,'Foo')]
Funktioniert, wenn ich diese XML verwende, um Ergebnisse zurück zu bekommen.
<bla>
<a prop="Foo1">a</a>
<a prop="Foo2">b</a>
<a prop="3Foo">c</a>
<a prop="Bar">a</a>
</bla>
Bearbeiten: Eine andere Sache zu beachten ist, dass, während der XPath oben die richtige Antwort für diese bestimmte XML zurückgibt, wenn Sie garantieren möchten, dass Sie nur die "a" -Elemente im Element "bla" erhalten, sollten Sie, wie andere erwähnt haben, auch verwenden
/bla/a[contains(@prop,'Foo')]
Dadurch werden alle "a" -Elemente in Ihrem gesamten XML-Dokument durchsucht, unabhängig davon, ob sie in einem "blah" -Element verschachtelt sind
//a[contains(@prop,'Foo')]
Ich habe dies aus Gründen der Gründlichkeit und im Geiste des Stapelüberlaufs hinzugefügt. :)
Mit diesem XPath erhalten Sie alle Knoten, deren Attribute 'Foo' enthalten, unabhängig vom Knotennamen oder Attributnamen:
//attribute::*[contains(., 'Foo')]/..
Wenn Sie sich mehr für den Inhalt des Attributs selbst und nicht unbedingt für den übergeordneten Knoten interessieren, legen Sie einfach den Befehl/.. ab.
//attribute::*[contains(., 'Foo')]
descendant-or-self::*[contains(@prop,'Foo')]
Oder:
/bla/a[contains(@prop,'Foo')]
Oder:
/bla/a[position() <= 3]
Präpariert:
descendant-or-self::
Die Achse - Durchsucht jeden Knoten darunter und den Knoten selbst. Es ist oft besser, das zu sagen als //. Ich bin auf einige Implementierungen gestoßen, bei denen // irgendwo bedeutet (Nachkomme oder Selbst des Wurzelknotens). Die anderen verwenden die Standardachse.
* or /bla/a
Das Tag - ein Wildcard-Match, und/bla/a ist ein absoluter Pfad.
[contains(@prop,'Foo')] or [position() <= 3]
Die Bedingung innerhalb von []. @prop ist die Abkürzung für attribute :: prop, da attribute eine andere Suchachse ist. Alternativ können Sie die ersten 3 mit der Funktion position () auswählen.
John C ist am nächsten, XPath unterscheidet jedoch zwischen Groß- und Kleinschreibung. Der richtige XPath wäre also:
/bla/a[contains(@prop, 'Foo')]
Wenn Sie auch den Inhalt des Links selbst abgleichen müssen, verwenden Sie text ():
//a[contains(@href,"/some_link")][text()="Click here"]
Haben Sie etwas ausprobiert wie:
// a [enthält (@prop, "Foo")]
Ich habe die Enthält-Funktion noch nie benutzt, aber ich habe den Verdacht, dass sie wie angekündigt funktionieren sollte ...
/ bla/a [enthält (@prop, "foo")]
Für den obigen Code ... // * [enthält (@ prop, 'foo')]
versuche dies:
// a [enthält (@ prop, 'foo')]
das sollte für alle "a" -Tags im Dokument funktionieren