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

时间:2010-06-08 01:11:09

标签: xml 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 个答案:

答案 0 :(得分:132)

是否要查找包含“匹配”的元素,或等于“匹配”的元素?

这将找到文本节点等于'match'的元素(由于random2中的前导和尾随空格,因此不匹配任何元素):

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

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

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

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

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

XPATH 2.0 解决方案使用matches()函数和正则表达式模式,该模式查找包含“匹配”的文本节点并从字符串的开头开始(即^)或字边界(即\W)并以字符串的末尾(即$)或字边界终止。第三个参数i评估不区分大小写的正则表达式模式。 (匹配random2

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

答案 1 :(得分:0)

尝试

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