Sök…


Hitta alla element med viss text

Föreställ dig följande XML:

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

Följande XPath-uttryck:

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

kommer att returnera <element>hello</element> -elementet, men inte <another> -elementet. Detta beror på att <another> -elementet innehåller ett utrymme som omger hello .

För att hämta både <element> och <another> , kan man använda:

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

eller

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

vilket kommer att trimma det omgivande vitrummet innan du gör jämförelsen. Här kan vi se att text() nodspecifikationen är valfri när du använder normalize-space .

För att hitta ett element som innehåller specifik text kan du använda funktionen contains . Följande uttryck returnerar elementet <example> :

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

Om du vill hitta text som spänner över flera barn / textnoder kan du använda . istället för text() . . hänvisar till hela textinnehållet i elementet och det är barn.

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

För att se flera textnoder kan du använda:

//example//text()

som kommer att återvända:

  • "Hallå, "
  • "Jag är ett exempel"
  • ""

Och för att tydligare se hela textinnehållet i ett element kan man använda string :

string(//example[1])

eller bara

string(//example)

Hej, jag är ett exempel.

Det senare fungerar eftersom XPath 1.0 bara tittar på den första noden (i dokumentordning) i den noduppsättningen och ignorerar resten om en noduppsättning överförs till funktioner som string .

så:

string(/root/*)

skulle återvända:

Hej



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow