XPath 只返回包含文本的元素,而不返回其父元素

在这个 xml 中,我希望匹配包含“ match”(Random 2 element)的元素

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

好吧,目前为止我有:

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

这个函数返回随机数2,随机数1和根... 我只想得到随机数2

有什么想法吗?

149873 次浏览

试试看

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

您想要找到与 包容“匹配”的元素,还是与 平等“匹配”的元素?

这将找到具有等于“ match”的文本节点的元素(由于 random2中的前导空格和尾随空格,所以不匹配任何元素) :

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

在删除前导空格和尾随空格(匹配 random2)之后,这将找到所有具有等于“ match”的文本节点的元素:

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

这将找到文本节点值中包含“ match”的所有元素(匹配 random2random3) :

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

这个 XPATH 2.0解决方案使用 matches()函数和 regex 模式,寻找包含“ match”的文本节点,从字符串的开始(即 ^)或字边界(即 \W)开始,到字符串的结束(即 $)或字边界结束。第三个参数 i计算不区分大小写的正则表达式模式。(匹配 random2)

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