XQuery“例外”表达式未产生所需的结果

问题描述 投票:0回答:2

我正在使用BaseX最新版本11.0 beta。

我正在尝试使用

/root/base/r
序列删除
/root/remove/r
序列中的德克萨斯州城市。

目标是使用 XQuery

except
表达式。

这是我的 XML 和 XQuery

declare context item := document {
<root>
  <base>
    <r>Miami</r>
    <r>Orlando</r>
    <r>Dallas</r>
    <r>Austin</r>
  </base>
  <remove>
    <r>Dallas</r>
    <r>Austin</r>
  </remove>
</root>
};

let $remove := /root/remove/r
return /root/base/r except $remove

所需输出

<r>Miami</r>
<r>Orlando</r>

不幸的是,我得到了相同的初始 XML

<r>Miami</r>
<r>Orlando</r>
<r>Dallas</r>
<r>Austin</r>

不清楚我做错了什么。

xml xquery basex
2个回答
0
投票

except
运算符通过节点标识而不是字符串值来比较节点。

你想要

/root/base/r[not(. = /root/base/remove)]

0
投票

使用

except
,比较节点引用,而不是其内容。例如,以下查询将从结果中排除具有相同节点标识的节点:

let $remove := /root/base/r[position() > 2]
return /root/base/r except $remove

如果要排除

base
分支中具有
$remove
分支字符串值的所有节点,可以执行以下操作:

let $remove := /root/remove/r
return /root/base/r[not(. = $remove)]
© www.soinside.com 2019 - 2024. All rights reserved.