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"
какие идеи?
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')]
Comments