如何用XPath判断每个item元素至少包含一个attributes/attr1='A'
解决XPath判断所有item都包含attr1='A'的问题
给定XML:
<collection> <item> <id>001</id> <attributes> <attr1>A</attr1> </attributes> <attributes> <attr1>B</attr1> </attributes> </item> <item> <id>002</id> <attributes> <attr1>B</attr1> </attributes> </item> <item> <id>003</id> <attributes> <attr1>A</attr1> </attributes> </item> </collection>
你的需求是编写XPath,当所有<item>都至少包含一个attributes/attr1='A'时返回true。你之前用的//item/attributes/attr1/text()='A'无法实现需求——这个表达式在XPath 1.0里只会取第一个匹配的attr1值做比较,在XPath 2.0+里会返回多个布尔值,但都没法判断所有item都满足条件。
正确的XPath写法
XPath 1.0 兼容写法
not(//item[not(attributes/attr1='A')])
逻辑:先找所有不包含attr1='A'的attributes的item,再用not()判断这类item是否不存在——如果不存在,说明所有item都满足条件,返回true。
XPath 2.0+ 更直观写法
every $item in //item satisfies $item/attributes/attr1='A'
逻辑:遍历所有item,检查每个item都满足“存在attr1值为A的attributes”,全部满足则返回true。
内容的提问来源于stack exchange,提问作者James Taylor
相关产品推荐
相关产品推荐

