XPath需求咨询:筛选含match模式的去重Condition节点
解决XPath筛选带
mode="match"的entry下Condition并去重的问题 直接给你能满足需求的XPath表达式:
//Bundle/entry[mode/@value='match']/resource/Condition[not(id/@value=following::entry[mode/@value='match']/resource/Condition/id/@value)]
你之前写法的问题分析
- 第一种写法
//Bundle/entry[<<expression>>]/resource/Condition[not(id/@value=following::Condition/id/@value)]:这里的following::Condition会匹配整个文档里所有后续的Condition节点,包括那些不在mode="match"的entry下的节点。如果某个不符合条件的entry里存在相同id的Condition,会错误过滤掉你需要保留的目标节点。 - 第二种写法
//Bundle/entry/resource/Condition[not(id/@value=following::Condition/id/@value) and ../../<<expression>>]:逻辑顺序错误——先做了全局范围内的Condition去重,再筛选所在entry符合条件的节点。这会导致符合条件的entry里的重复Condition可能已经被全局去重剔除,最终结果无法精准匹配你的需求。
正确表达式的逻辑
- 先锁定所有包含
<mode value="match"/>的entry节点://Bundle/entry[mode/@value='match'] - 在这些entry下的
Condition中,只保留后续符合条件的entry里没有相同id的节点:not(id/@value=following::entry[mode/@value='match']/resource/Condition/id/@value)
这样就能精准筛选出目标entry下的Condition,同时完成去重,最终只保留每个唯一id的第一个出现实例。
内容的提问来源于stack exchange,提问作者WApp
相关产品推荐
相关产品推荐

