在XQuery中获取MINUS SQL运算符的功能

时间:2011-06-20 12:18:11

标签: xquery

从以前的查询中,我有两个变量。第一个:

<list>
    <item>a</item>
    <item>b</item>
    <item>a</item>
    <item>c</item>
</list>

第二个:

<list>
    <item>b</item>
</list>

我想要第一个列表中的节点,但不是第二个列表中的节点:

<list>
    <item>a</item>
    <item>c</item>
</list>

(与SQL MINUS运算符一样) 我怎么能这样做?

编辑:Fortunetaly,WikiBooks已经有answer

1 个答案:

答案 0 :(得分:0)

尝试以下基于XPath2.0的基础 - =运算符充当一种连接,并允许隐式迭代(在这种情况下,与for结合使用)。

请注意,变量$ onlyin1可以直接用于从一个列表中输出第二个列表中不存在的节点,但下面的代码允许您对具有相同内容的节点进行重复数据删除。

let 
$list1 := 
<list>
    <item>a</item>
    <item>b</item>
    <item>a</item>
    <item>c</item>
</list>,
$list2 := 
<list>
    <item>b</item>
</list>,
$onlyin1 := $list1//item[text()!=$list2//item/text()]
return 
<list>
   {for $item in distinct-values($onlyin1/text()) return 
   <item>{$item}</item>
   }
</list>