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

jul*_*ian 71 xml xpath

在这个xml中,我想匹配,包含'match'的元素(random2元素)

<root>
 <random1>
  <random2>match</random2>
  <random3>nomatch</random3>
 </random1>
</root>
Run Code Online (Sandbox Code Playgroud)

好的,到目前为止我有:

//[re:test(.,'match','i')] (with re in the proper namespace)
Run Code Online (Sandbox Code Playgroud)

这会返回random2,random1和root ...我想只获得"random2"

有任何想法吗?

Mad*_*sen 151

您是否要查找包含 "匹配"或等于 "匹配"的元素?

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

//*[text()='match']
Run Code Online (Sandbox Code Playgroud)

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

//*/text()[normalize-space(.)='match']/parent::*
Run Code Online (Sandbox Code Playgroud)

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

//*[contains(text(),'match')]
Run Code Online (Sandbox Code Playgroud)

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

//*[matches(text(),'(^|\W)match($|\W)','i')]
Run Code Online (Sandbox Code Playgroud)