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



в этом xml, я хочу, чтобы соответствовать, элемент, содержащий ' match '(random2 элемент)



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


хорошо, пока у меня есть:



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


это возвращает random2, random1 и root... Я хотел бы получить только "random2"



какие идеи?

640   2  

2 ответов:

вы хотите найти элементы, которые содержат "матча", или равной "матч"?

это будет найти элементы, которые имеют текстовые узлы, которые равны "матч" (не соответствует ни один из элементов из-за ведущих и конечных пробелов в random2):

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

это позволит найти все элементы, которые имеют текстовые узлы, равные "матч", после удаления ведущих и конечных пробелов(матчи random2):

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

это позволит найти все элементы, которые содержат 'match' в значении текстового узла (matches random2 и random3):

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

этой XPATH 2.0 решение использует функцию matches () и шаблон регулярного выражения, который ищет текстовые узлы, содержащие "match" и начинающиеся в начале строки(т. е. ^) или границы слова (т. е. \W) и завершается в конце строки (т. е. $) или слово граница. Третий параметр i вычисляет шаблон регулярных выражений без учета регистра. (спички random2)

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

попробовать

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

Comments

    Ничего не найдено.