如何调整XPath以在父节点Form_1范围内查找重复Country值?
问题:在单个Form_1节点范围内查找重复的Country值
给定XML结构:
<Forms> <Form_1> <Country>AFG</Country> <Country>AFG</Country> <Country>IND</Country> </Form_1> <Form_1> <Country>IND</Country> <Country>USA</Country> </Form_1> </Forms>
当前使用XPath表达式 Forms//Form_1/Country[.=./following::Country] 会返回整个文档中重复的Country值(AFG和IND),但需求是仅在单个Form_1父节点范围内查找重复值,期望结果仅为AFG。
解决方案
调整后的XPath表达式:
Forms//Form_1/Country[exists(following-sibling::Country[. = current()])]
说明
- 原表达式里的
following::Country会匹配整个文档中当前节点之后的所有Country节点,所以会跨Form_1节点把第二个Form_1里的IND也判定为重复。 - 改用
following-sibling::Country后,只会匹配同一个Form_1父节点下、当前Country节点之后的兄弟节点,严格限制在了单个Form_1的范围内。 exists()用来判断当前节点之后是否有相同值的兄弟Country节点,精准筛选出单个Form_1内重复的Country值(此处仅返回AFG)。
另一种等价的简洁写法:
Forms//Form_1/Country[.=following-sibling::Country]
内容的提问来源于stack exchange,提问作者Pawan Nogariya
相关产品推荐
相关产品推荐

