Suche…


Finde alle Elemente mit bestimmtem Text

Stellen Sie sich folgendes XML vor:

<root>
    <element>hello</element>
    <another>
        hello
    </another>
    <example>Hello, <nested> I am an example </nested>.</example>
</root>

Der folgende XPath-Ausdruck:

//*[text() = 'hello']

gibt das <element>hello</element> , nicht jedoch das Element <another> . Dies liegt daran, dass das Element <another> Leerzeichen um den hello Text enthält.

Um sowohl <element> als auch <another> abzurufen, könnte man Folgendes verwenden:

//*[normalize-space(text()) = 'hello']

oder

//*[normalize-space() = 'hello']

Dadurch wird der umgebende Leerraum getrimmt, bevor der Vergleich durchgeführt wird. Hier können wir sehen, dass der Node-Bezeichner text() bei Verwendung von normalize-space optional normalize-space .

Um ein Element zu finden, das bestimmten Text enthält, können Sie die Funktion contains verwenden. Der folgende Ausdruck gibt das <example> -Element zurück:

//example[contains(text(), 'Hello')]

Wenn Sie Text suchen möchten, der sich über mehrere untergeordnete / Textknoten erstreckt, können Sie verwenden . anstelle von text() . . bezieht sich auf den gesamten Textinhalt des Elements und seiner untergeordneten Elemente.

//example[. = 'Hello,  I am an example .']

Um die mehreren Textknoten anzuzeigen, können Sie Folgendes verwenden:

//example//text()

was wird zurückkehren:

  • "Hallo, "
  • "Ich bin ein Beispiel"
  • "."

Und um den gesamten Textinhalt eines Elements klarer zu sehen, kann man die string Funktion verwenden:

string(//example[1])

oder nur

string(//example)

Hallo, ich bin ein Beispiel.

Letzteres funktioniert, da XPath 1.0 bei der Übergabe eines Knotensatzes an Funktionen wie string nur den ersten Knoten (in Dokumentreihenfolge) in diesem Knotensatz betrachtet und den Rest ignoriert.

so:

string(/root/*)

würden zurückkehren:

Hallo



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow