In Anbetracht dieser XML gibt XPath alle Elemente zurück, deren prop
Attribut enthält Foo
(die ersten drei Knoten):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
In Anbetracht dieser XML gibt XPath alle Elemente zurück, deren prop
Attribut enthält Foo
(die ersten drei Knoten):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Antworten:
//a[contains(@prop,'Foo')]
Funktioniert, wenn ich dieses XML verwende, um Ergebnisse zurückzugewinnen.
<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 Stackoverflow hinzugefügt. :) :)
xmlme.com
Leitet jetzt zu einem anderen Host weiter und scheint das Tool oder ähnliches nicht zu hosten.
Dieser XPath gibt Ihnen alle Knoten mit Attributen, die 'Foo' enthalten, unabhängig vom Knotennamen oder Attributnamen:
//attribute::*[contains(., 'Foo')]/..
Wenn Sie mehr am Inhalt des Attributs selbst und nicht unbedingt am übergeordneten Knoten interessiert sind, lassen Sie einfach das / ..
//attribute::*[contains(., 'Foo')]
//@*[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 - Durchsuchen Sie jeden Knoten darunter und den Knoten selbst. Es ist oft besser, dies 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 Platzhalter-Match und / bla / a ist ein absoluter Pfad.
[contains(@prop,'Foo')] or [position() <= 3]
Die Bedingung innerhalb von []. @prop ist eine Abkürzung für attribute :: prop, da attribute eine weitere Suchachse ist. Alternativ können Sie die ersten 3 mit der Funktion position () auswählen.
John C ist am nächsten, aber XPath unterscheidet zwischen Groß- und Kleinschreibung. Der richtige XPath wäre also:
/bla/a[contains(@prop, 'Foo')]
Haben Sie etwas versucht wie:
// a [enthält (@prop, "Foo")]
Ich habe die Includes-Funktion noch nie verwendet, vermute aber, dass sie wie angekündigt funktionieren sollte ...
Wenn Sie auch den Inhalt des Links selbst abgleichen müssen, verwenden Sie text ():
//a[contains(@href,"/some_link")][text()="Click here"]
/ bla / a [enthält (@prop, "foo")]
Versuche dies:
// a [enthält (@ prop, 'foo')]
Das sollte für alle "a" -Tags im Dokument funktionieren