71 Stimmen

XPath-Auswahl nach innerem Text

Ich versuche, ein Element mit einem bestimmten innertext aus einem geparsten XML-Dokument zu extrahieren. Ich weiß, dass ich ein Element auswählen kann, das ein Kind mit einem bestimmten inneren Text hat, indem ich //myparent[mychild='foo'] , aber eigentlich möchte ich in diesem Beispiel nur das Element "mychild" auswählen.

<myparent>
  <mychild>
    foo
  </mychild>
</myparent>

Wie würde die XPath-Abfrage für "foo" lauten, die den Knoten "mychild" zurückgeben würde?

110voto

glmxndr Punkte 43786

Haben Sie das schon ausprobiert?

//myparent/mychild[text() = 'foo']

Alternativ können Sie auch den Shortcut für die self Achse:

//myparent/mychild[. = 'foo']

7voto

Pål Thingbø Punkte 1062

Matt hat es gesagt, aber die vollständige Lösung:

//myparent[mychild='foo']/mychild

6voto

Sie könnten die Verwendung des contains Funktion, die true/false zurückgibt, wenn der Test wie folgt gefunden wurde:

//mychild[contains(text(),'foo')]

Siehe XSLT-, XPath- und XQuery-Funktionen für Funktionen Referenz

3voto

undetected Selenium Punkte 147423

Wie im HTML:

<myparent>
  <mychild>
    foo
  </mychild>
</myparent>

El <mychild> Element mit Text als foo ist innerhalb seiner übergeordneten <myparent> Tag und der Text enthält führend y hintere Weißraum Zeichen.

So wählen Sie die <mychild> Element können Sie eine der folgenden Lösungen verwenden:

  • Verwendung von normalize-space() :

    //myparent/mychild[normalize-space()='foo']
  • Verwendung von contains() :

    //myparent/mychild[contains(., 'foo')]

Ignorieren der Eltern <myparent> Tag können Sie auch verwenden:

  • Verwendung von normalize-space() :

    //mychild[normalize-space()='foo']
  • Verwendung von contains() :

    //mychild[contains(., 'foo')]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X