Was ist die korrekte XPath Attribute für die Wahl, die „foo“ enthalten?

StackOverflow https://stackoverflow.com/questions/103325

  •  01-07-2019
  •  | 
  •  

Frage

Dieses XML gegeben, was XPath gibt alle Elemente, deren prop Attribut enthält Foo (die ersten drei Knoten):

<bla>
 <a prop="Foo1"/>
 <a prop="Foo2"/>
 <a prop="3Foo"/>
 <a prop="Bar"/>
</bla>
War es hilfreich?

Lösung

//a[contains(@prop,'Foo')]

funktioniert, wenn ich diese XML verwenden, um Ergebnisse zu kommen.

<bla>
 <a prop="Foo1">a</a>
 <a prop="Foo2">b</a>
 <a prop="3Foo">c</a>
 <a prop="Bar">a</a>
</bla>

Edit: Eine andere Sache zu beachten ist, dass während der XPath oben wird die richtige Antwort für diese bestimmte XML zurückgeben, wenn Sie nur die „a“ Elemente im Element „bla“ erhalten garantieren wollen, sollten Sie als andere haben auch verwenden erwähnt

/bla/a[contains(@prop,'Foo')]

Dies sucht Sie alle "a" Elemente in der gesamten XML-Dokument, unabhängig davon, in einem "blah" Element verschachtelt werden

//a[contains(@prop,'Foo')]  

Ich habe diese aus Gründen der Gründlichkeit und im Geiste der Stackoverflow. :)

Andere Tipps

Diese XPath geben Ihnen alle Knoten, die Attribute enthalten ‚Foo‘ unabhängig von Knotennamen oder Attributnamen haben:

//attribute::*[contains(., 'Foo')]/..

Natürlich, wenn Sie mehr daran interessiert, den Inhalt des Attributs sind selbst, und nicht unbedingt ihre Mutterknoten, fallen nur die /..

//attribute::*[contains(., 'Foo')]
descendant-or-self::*[contains(@prop,'Foo')]

Oder:

/bla/a[contains(@prop,'Foo')]

Oder:

/bla/a[position() <= 3]

Dissected:

descendant-or-self::

Die Achse - Suche durch alle Knoten unterhalb und den Knoten selbst. Oft ist es besser zu sagen, dass dies als //. Ich habe einige Implementierungen auftreten, wo // bedeutet überall (decendant oder selbst des Wurzelknotens). Die andere die Standardachse verwenden.

* or /bla/a

Der Tag -. Ein Platzhalter Spiel, und / bla / a ist ein absoluter Pfad

[contains(@prop,'Foo')] or [position() <= 3]

Die Bedingung innerhalb []. @prop ist eine Abkürzung für Attribut :: Stütze, als Attribut eine andere Suchachse ist. Alternativ können Sie die ersten 3 auswählen, indem Sie die Position () Funktion.

John C ist in der Nähe, aber XPath ist Groß- und Kleinschreibung, so dass die korrekte XPath wäre:

/bla/a[contains(@prop, 'Foo')]

Haben Sie versucht, so etwas wie:

// a [enthält (@prop, "Foo")]

Ich habe noch nie verwendet die Funktion enthält, bevor aber vermuten, dass es sollte funktionieren wie in der Werbung ...

Wenn Sie auch den Inhalt des Verweises passen selbst, verwendet Text ():

//a[contains(@href,"/some_link")][text()="Click here"]

/ bla / a [enthält (@prop, "foo")]

Für den Code oben ... // * [enthält (@ Stütze, 'foo')]

versuchen Sie dies:

// a [enthält (@ Stütze, 'foo')]

das sollte für alle "a" Tags im Dokument arbeitet

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top