xpath
Hitta element som innehåller specifik text
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