从以前的查询中,我有两个变量。第一个:
<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。
答案 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>