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

ten*_*est 2 xquery

我试图从我们的XML本机数据库中提取一些数据,如果一个元素的值在包含的值序列中.不要以为我说得对.例如,

给出以下XML:

<root>
   <a>1</a>
<root>
Run Code Online (Sandbox Code Playgroud)

似乎应该有办法做某事(借口语法,视为伪)

where root/a in (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

从我的所有搜索中,这似乎是不可能的.充其量,我得到了:

where root/a = 1 or root/1 = 2 or root/a = 3   etc
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

har*_*r07 5

你可以简单地使用=运算符:

where root/a = (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

=适用于类似于包含的设定值,这正是您所需要的.对比度=eq这需要用于比较原子值.


以下是一个完整的例子.

XML:

<root>
    <parent>
        <a>1</a>
    </parent>
    <parent>
        <a>4</a>
    </parent>
    <parent>
        <a>10</a>
    </parent>
</root>
Run Code Online (Sandbox Code Playgroud)

XQuery:

for $p in /root/parent
where $p/a = (1,2,3,4)
return $p
Run Code Online (Sandbox Code Playgroud)

输出:

<parent>
   <a>1</a>
</parent>
<parent>
   <a>4</a>
</parent>
Run Code Online (Sandbox Code Playgroud)

演示: xpathtester

  • +1仅供参考 - @tenwest,您还可以将过滤从 FLWOR 中的“where”表达式移动到谓词中,并使用以下(等效且更短的)XPath 表达式选择父元素:“/root/parent[a = (1, 2,3,4)]` (3认同)