Xquery Where子句确定元素值是否在序列中(XQ)

Xquery Where子句确定元素值是否在序列中(XQ),xquery,Xquery,如果一个元素的值包含在值序列中,我将尝试从XML原生数据库中提取一些数据。别以为我说得对。比如说, 给定以下XML: <root> <a>1</a> <root> 从我所有的搜索来看,这似乎是不可能的。充其量,我得到了: where root/a = 1 or root/1 = 2 or root/a = 3 etc 有更好的方法吗?您只需使用=运算符: where root/a = (1,2,3,4) =处理与contains类似

如果一个元素的值包含在值序列中,我将尝试从XML原生数据库中提取一些数据。别以为我说得对。比如说,

给定以下XML:

<root>
   <a>1</a>
<root>
从我所有的搜索来看,这似乎是不可能的。充其量,我得到了:

where root/a = 1 or root/1 = 2 or root/a = 3   etc

有更好的方法吗?

您只需使用
=
运算符:

where root/a = (1,2,3,4)
=
处理与contains类似的设置值,这正是您所需要的。将
=
与需要原子值进行比较的
eq
进行对比


下面是一个完整的例子

XML:

<root>
    <parent>
        <a>1</a>
    </parent>
    <parent>
        <a>4</a>
    </parent>
    <parent>
        <a>10</a>
    </parent>
</root>
for $p in /root/parent
where $p/a = (1,2,3,4)
return $p
<parent>
   <a>1</a>
</parent>
<parent>
   <a>4</a>
</parent>
输出:

<root>
    <parent>
        <a>1</a>
    </parent>
    <parent>
        <a>4</a>
    </parent>
    <parent>
        <a>10</a>
    </parent>
</root>
for $p in /root/parent
where $p/a = (1,2,3,4)
return $p
<parent>
   <a>1</a>
</parent>
<parent>
   <a>4</a>
</parent>


+1 FYI-@tenwest您还可以将过滤从FLWOR中的
where
表达式移动到谓词中,并使用此XPath表达式选择父元素:
/root/parent[a=(1,2,3,4)]