XQuery/XPath "except" 操作 - 选择不在其他序列中的序列部分

fre*_*233 4 xpath xquery

我有一个非常简单的例子,但我只是在学习,找不到以下解决方案:

给定 2 个序列,是

<emp>10</emp>
<emp>42</emp>
<emp>100</emp>
Run Code Online (Sandbox Code Playgroud)

和另一个序列

  <emp>10</emp>
  <emp>42</emp>
Run Code Online (Sandbox Code Playgroud)

我想要做的是:比较序列并返回在第一个序列中但不在第二个序列中的序列部分,<emp>100</emp>在这种情况下。

我正在考虑“除外”操作,但无法弄清楚如何使其工作。

非常感谢帮助。

wst*_*wst 6

except表达式对节点标识进行操作,而不是节点值。我认为您想要的是对您的序列进行值比较。例如:

let $seq1 := 
  (<emp>10</emp>,
  <emp>42</emp>,
  <emp>100</emp>)
let $seq2 :=
  (<emp>10</emp>,
  <emp>42</emp>)
return $seq1[not(. = $seq2)]
Run Code Online (Sandbox Code Playgroud)

=> <emp>100</emp>

  • 点代表上下文节点 - 一个基本的 XPath 概念。当您应用谓词来过滤节点集`NN[. = 'x']` 那么上下文节点是您当前正在测试的节点,即它实际上是一个范围变量,范围在 NN 中的节点上。这里的另一个重要概念是“=”具有存在语义:如果 AA 中的任何项目等于 BB 中的任何项目,则 AA=BB 为真。但我无法用 500 个字符解释 XPath 概念——您需要阅读一些内容。 (4认同)