如何用XPath判断属性值是否匹配指定列表或其他XPath结果
XPath 问题解答
一、示例场景的解决方案
要定位X/Y节点中A属性值为35、36或37的第三个Y元素,可使用以下XPath表达式:
- 兼容XPath 1.0的写法:
(X/Y[@A="35" or @A="36" or @A="37"])[3] - 针对XPath 2.0及以上版本的简化写法:
(X/Y[@A=("35","36","37")])[3]
二、实际场景的疑问解答:能否在contains中嵌套目标XPath
不能直接在contains()函数中嵌套该XPath表达式,核心原因是contains()要求两个参数均为字符串,而/X/reference[@parent="X"][@child="Y"]/@refid返回的是节点集(或属性值序列),类型不匹配。
要实现“判断Y节点的A属性值是否存在于目标refid列表中”的需求,可根据你使用的XPath版本选择对应写法:
XPath 1.0 写法
X/Y[count(/X/reference[@parent="X"][@child="Y"][@refid=current()/@A]) > 0]
这里current()指代当前遍历的Y节点,通过统计匹配refid的节点数量,大于0则说明该Y节点的A属性值在目标列表中。
XPath 2.0+ 写法
可以用更简洁的exists()函数或直接序列匹配:
X/Y[exists(/X/reference[@parent="X"][@child="Y"][@refid=@A])]
或者:
X/Y[@A = /X/reference[@parent="X"][@child="Y"]/@refid]
内容的提问来源于stack exchange,提问作者Divya MV
相关产品推荐
相关产品推荐

