wake-up-neo.com

XPath, um nur Elemente zurückzugeben, die den Text enthalten, und nicht die übergeordneten Elemente

In dieser XML-Datei möchte ich übereinstimmen, das Element, das 'match' enthält (random2-Element)

<root>
 <random1>
  <random2>match</random2>
  <random3>nomatch</random3>
 </random1>
</root>

ok, bisher habe ich:

//[re:test(.,'match','i')] (with re in the proper namespace)

das gibt random2, random1 und root zurück ... ich möchte nur "random2" bekommen

irgendwelche Ideen?

60
julian

Möchten Sie Elemente finden, die enthalten "übereinstimmen" oder gleich "übereinstimmen"?

Dadurch werden Elemente gefunden, deren Textknoten gleich "übereinstimmen" ist (entspricht keinem der Elemente aufgrund des führenden und nachgestellten Leerzeichens in random2):

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

Hiermit werden alle Elemente gefunden, deren Textknoten gleich "übereinstimmen" ist, nachdem führende und nachgestellte Leerzeichen entfernt wurden (entspricht random2):

//*/text()[normalize-space(.)='match']/parent::*

Dadurch werden alle Elemente gefunden, die im Textknotenwert "match" enthalten (entspricht random2 und random3):

//*[contains(text(),'match')]

Diese XPATH 2.0 -Lösung verwendet die Matches () - Funktion und ein Regex-Muster, das nach Textknoten sucht, die "match" enthalten und am Anfang des Strings (dh ^) oder einer Wortgrenze (dh \W) beginnen und terminiert sind am Ende des Strings (dh $) oder einer Word-Grenze. Der dritte Parameter i wertet die Groß- und Kleinschreibung der Regex-Muster aus. (entspricht random2)

//*[matches(text(),'(^|\W)match($|\W)','i')]
122
Mads Hansen

Versuchen

//re:*[. ='match']
0
Gregoire