Zoeken…


Zoek alle elementen met bepaalde tekst

Stel je de volgende XML voor:

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

De volgende XPath-expressie:

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

retourneert het <element>hello</element> , maar niet het element <another> . Dit komt omdat het element <another> witruimte rondom de hello tekst bevat.

Om zowel <element> als <another> , zou men kunnen gebruiken:

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

of

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

waarmee de omringende witruimte wordt bijgesneden voordat de vergelijking wordt uitgevoerd. Hier kunnen we zien dat de specificator text() node optioneel is bij gebruik van normalize-space .

Om een element te vinden dat specifieke tekst bevat, kunt u de functie contains . De volgende expressie retourneert het element <example> :

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

Als u tekst wilt zoeken die meerdere kinderen / tekstknooppunten omvat, kunt u gebruiken . in plaats van text() . . verwijst naar de volledige tekstinhoud van het element en zijn kinderen.

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

Om de meerdere tekstknooppunten te zien, kunt u het volgende gebruiken:

//example//text()

die zal terugkeren:

  • "Hallo, "
  • "Ik ben een voorbeeld"
  • ""

En om de volledige tekstinhoud van een element duidelijker te zien, kan men de string :

string(//example[1])

of gewoon

string(//example)

Hallo, ik ben een voorbeeld.

Het laatste werkt omdat, als een knooppuntset wordt doorgegeven aan functies zoals string , XPath 1.0 alleen naar het eerste knooppunt (in documentvolgorde) in die knooppuntset kijkt en de rest negeert.

zo:

string(/root/*)

zou terugbrengen:

Hallo



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow