我有一个结构如下的文档:
<INVT_DATA xmlns="http://www.mrbook.com/InventoryData">
<AUTHOR>...</AUTHOR>
<TITLE>...</TITLE>
<PUBLISHER>...</PUBLISHER>
</INVT_DATA>
INVT_DATA 的子子元素始终是元素,而不是文本节点。我想使用 XQuery 来比较具有相同结构的新文档。如果新元素和原始元素中都存在子元素,则应将其替换。如果新元素中存在子元素,但旧元素中不存在,则应将其附加到 INVT_DATA。
我认为这个 XQuery 会起作用,但它似乎总是只是附加节点:
declare namespace invtdata="http://www.mrbook.com/InventoryData";
copy $oldInvtData := $oldXml
modify
(
for $mpf in $newXml/invtdata:INVT_DATA/*
let $oldMpf := $oldInvtData/invtdata:INVT_DATA/*[name()=name($mpf)]
return if(exists($oldMpf)) then
replace node $oldMpf with $mpf
else insert node $mpf into $oldInvtData
)
return $oldInvtData
我搜索了其他类似的问题并找到了这个,但这对于我想做的事情来说有点过分了。有什么建议么?如果有帮助,我将使用 Oracle XML DB 版本 11.2.0.3 中的 XmlQuery。