XPath для возврата только элементов, содержащих текст и не его родителей

В этом 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"

какие-либо идеи?

71
задан Basheer AL-MOMANI 14 March 2017 в 13:47
поделиться

2 ответа

Вы хотите найти элементы, которые содержат «совпадение» или равное «совпадение»?

Это найдет элементы, текстовые узлы которых равны «совпадению» (не соответствует ни одному из элементов из-за начальных и конечных пробелов в 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')]
151
ответ дан 24 November 2019 в 12:59
поделиться

Попробуйте

//re:*[. ='match']
0
ответ дан 24 November 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: