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和根…我想只得到“random2”

有任何想法吗?

你想find包含 “匹配”,或相等的 “匹配”的元素?

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

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

这将find所有具有等于“匹配”的文本节点的元素,除去前导和尾随的空白(匹配random2 )之后:

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

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

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

这个XPATH 2.0解决scheme使用matches()函数和一个正则expression式模式来查找包含“匹配”的文本节点,并从string开头(即^ )或字边界(即\W )开始,string(即$ )或字边界。 第三个参数i评估正则expression式模式不区分大小写。 (匹配random2

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

尝试

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