XQuery创建含列表条件变量的技术问题咨询
XQuery筛选满足多条件的answer节点解决方案
不需要遍历$numbers来创建$answers变量,用XQuery的量化表达式就能直接实现你的需求。
需求拆解
你需要筛选$document中的answer节点,同时满足两个条件:
- 节点下存在
number子节点,其@number属性值为'ABC' - 该
answer节点下的number子节点,必须包含$numbers中的每一个数值(即同时存在@number为'1'、'2'、'3'、'6'的number节点)
实现代码
let $numbers := ('1', '2', '3', '6') let $answers := $document//answer[ # 条件1:存在@number为'ABC'的number子节点 number/@number = 'ABC' # 条件2:验证$numbers中的每个值都能在当前answer的number节点中找到匹配 and every $num in $numbers satisfies exists(number/@number = $num) ] return $answers
代码说明
number/@number = 'ABC':检查当前answer下是否有符合条件的number节点every $num in $numbers satisfies exists(...):这是XQuery的全称量化表达式,确保$numbers中的每一个值,都能在当前answer的number节点的@number属性中找到对应匹配,替代了手动遍历$numbers的操作
后续遍历处理
如果需要遍历筛选出的$answers节点,直接循环即可:
for $ans in $answers return $ans
内容的提问来源于stack exchange,提问作者papasvenska
相关产品推荐
相关产品推荐

