В этом xml я хочу соответствовать, элемент, содержащий 'соответствие' (random2 элемент)
<root>
<random1>
<random2>match</random2>
<random3>nomatch</random3>
</random1>
</root>
хорошо, до сих пор я имею:
//[re:test(.,'match','i')] (with re in the proper namespace)
это возвращает random2, random1 и корень... Я хотел бы добраться только "random2"
какие-либо идеи?
Вы хотите найти элементы, которые содержат «совпадение» или равное «совпадение»?
Это найдет элементы, текстовые узлы которых равны «совпадению» (не соответствует ни одному из элементов из-за начальных и конечных пробелов в random2
):
//*[text()='match']
Это найдет все элементы, текстовые узлы которых равны «match», после удаления начальных и конечных пробелов (соответствует random2
):
//*/text()[normalize-space(.)='match']/parent::*
Это найдет все элементы, которые содержат 'match' в значении текстового узла (соответствует random2
и random3
):
//*[contains(text(),'match')]
This Решение XPATH 2.0 использует функцию match () и шаблон регулярного выражения, который ищет текстовые узлы, содержащие слово «совпадение» и начинающиеся с начала строки (например, ^
) или границы слова ( т.е. \ W
) и заканчивается концом строки (например, $
) или границей слова. Третий параметр i
оценивает шаблон регулярного выражения без учета регистра. (соответствует random2
)
//*[matches(text(),'(^|\W)match($|\W)','i')]