In dieser XML möchte ich übereinstimmen, das Element, das 'match' enthält (random2-Element)
<root>
<random1>
<random2>match</random2>
<random3>nomatch</random3>
</random1>
</root>
ok, soweit habe ich:
//[re:test(.,'match','i')] (with re in the proper namespace)
Dies gibt random2, random1 und root zurück ... Ich möchte nur "random2" erhalten
irgendwelche Ideen?
Antworten:
Möchten Sie Elemente finden, die "Übereinstimmung" oder gleich "Übereinstimmung" enthalten?
Dadurch werden Elemente mit Textknoten gefunden, die gleich "Übereinstimmung" sind (entspricht keinem der Elemente, da Leerzeichen nach vorne und nach hinten führen
random2
):Dadurch werden alle Elemente mit Textknoten gefunden, die gleich "Übereinstimmung" sind, nachdem führende und nachfolgende Leerzeichen (Übereinstimmungen
random2
) entfernt wurden:Dadurch werden alle Elemente gefunden, die 'Übereinstimmung' im Textknotenwert (Übereinstimmungen
random2
undrandom3
) enthalten:Diese XPATH 2.0- Lösung verwendet die
matches()
Funktion und ein Regex-Muster, das nach Textknoten sucht, die 'match' enthalten und am Anfang der Zeichenfolge (dh^
) oder einer Wortgrenze (dh\W
) beginnen und am Ende der Zeichenfolge (dh$
) enden. oder eine Wortgrenze. Der dritte Parameteri
bewertet das Regex-Muster ohne Berücksichtigung der Groß- und Kleinschreibung. (Streichhölzerrandom2
)quelle
//*/text()[normalize-space(.)='match']/parent::*
sollte//*[normalize-space(text())='match']
oder//*[normalize-space(./text())='match']
Versuchen
quelle