在这个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”
任何想法?
答案 0 :(得分:132)
是否要查找包含“匹配”的元素,或等于“匹配”的元素?
这将找到文本节点等于'match'的元素(由于random2
中的前导和尾随空格,因此不匹配任何元素):
//*[text()='match']
在删除前导和尾随空格(匹配random2
)后,这将找到所有文本节点等于“匹配”的元素:
//*/text()[normalize-space(.)='match']/parent::*
这将找到文本节点值中包含“匹配”的所有元素(匹配random2
和random3
):
//*[contains(text(),'match')]
此 XPATH 2.0 解决方案使用matches()函数和正则表达式模式,该模式查找包含“匹配”的文本节点并从字符串的开头开始(即^
)或字边界(即\W
)并以字符串的末尾(即$
)或字边界终止。第三个参数i
评估不区分大小写的正则表达式模式。 (匹配random2
)
//*[matches(text(),'(^|\W)match($|\W)','i')]
答案 1 :(得分:0)
尝试
//re:*[. ='match']