次のような構造のドキュメントがあります。
<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 を使用しています。