我正在使用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>
不清楚我做错了什么。
except
运算符通过节点标识而不是字符串值来比较节点。
你想要
/root/base/r[not(. = /root/base/remove)]
使用
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)]