Xquery 除了多个xml文件外,如何查找/使用op:?

Xquery 除了多个xml文件外,如何查找/使用op:?,xquery,Xquery,除了多个xml文件外,如何查找/使用op: 我从文件1和文件2获得了节点,在xquery表达式中,我试图找到op:除了这两个。当我使用op:except时,我得到的是一个空集 XML文件1: <a>txt</a> <a>txt2</a> <a>txt3</a> txt txt2 txt3 XML文件2: <a>txt2</a> <a>txt4</a> <a>tx

除了多个xml文件外,如何查找/使用op:

我从文件1和文件2获得了节点,在xquery表达式中,我试图找到op:除了这两个。当我使用op:except时,我得到的是一个空集

XML文件1:

<a>txt</a>
<a>txt2</a>
<a>txt3</a>
txt
txt2
txt3
XML文件2:

<a>txt2</a>
<a>txt4</a>
<a>txt3</a>
txt2
txt4
txt3
我希望op:($nodesfromfile1,$nodesfromfile2)的输出为:

txt

在下面的代码中,它实际上是返回后面的一行。如果你愿意,你可以把它放在一个函数中,但是它已经非常密集了,所以可能不值得

let $file1 := (
    <a>txt</a>,
    <a>txt2</a>,
    <a>txt3</a>
)
let $file2 := (
    <a>txt2</a>,
    <a>txt4</a>,
    <a>txt3</a>
)
return
    $file1[not(. = $file2)]
let$file1:=(
txt,
txt2,
txt3
)
让$file2:=(
txt2,
txt4,
txt3
)
返回
$file1[不是(.=$file2)]
请注意,您还有'except'关键字(
$file1 except$file2
),但该关键字适用于节点标识,如果节点来自不同的文件,则该关键字将不起作用

顺便说一下,上面的代码使用字符串相等进行比较。如果希望对完整节点结构进行比较,还可以使用
deep-equal()
函数


奇怪。你说使用'except'返回一个空集。除非基于节点标识。此处的节点标识不同(因为节点来自不同的文件),因此结果应该是左操作数。。
let $file1 := (
    <a>txt</a>,
    <a>txt2</a>,
    <a>txt3</a>
)
let $file2 := (
    <a>txt2</a>,
    <a>txt4</a>,
    <a>txt3</a>
)
return
    $file1[not(. = $file2)]