2016-04-29 100 views
2

我想从我们的XML本机数据库中提取一些数据,如果一个元素的值在包含的值序列中。不要以为我说得对。例如,Where子句,以确定元素值是否在序列中(XQ)

鉴于以下XML:

<root> 
    <a>1</a> 
<root> 

似乎应该有办法做到像(借口语法,当作伪)

where root/a in (1,2,3,4) 

从我所有的搜寻,这似乎不可能。充其量,我得到了:

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

有没有更好的方法来做到这一点?

回答

5

您可以简单地使用=操作:

where root/a = (1,2,3,4) 

=作品的设定值类似于包含,这是你需要的究竟是什么。对比=eq需要原子值进行比较。


下面是一个完整的例子。

XML:

<root> 
    <parent> 
     <a>1</a> 
    </parent> 
    <parent> 
     <a>4</a> 
    </parent> 
    <parent> 
     <a>10</a> 
    </parent> 
</root> 

的XQuery:

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

输出:

<parent> 
    <a>1</a> 
</parent> 
<parent> 
    <a>4</a> 
</parent> 

演示:xpathtester

+2

哦,我的天啊真的?! 让我试试... – tenwest

+0

哇,作品像一个魅力哈哈。谢谢 – tenwest

+1

+1 FYI - @tenwest你也可以从FLWOR中的where表达式中移动过滤到谓词中,并用这个(等价和更短的)XPath表达式来选择父元素:'/ root/parent [a = (1,2,3,4)]' –

相关问题