Xquery を使用した XML の例で表現されている方法で、必要なすべての属性値を変更するにはどうすればよいですか?
Basex 7.6 Xquery および XML データベース エンジンを使用しています。これまでの私の目的は、XML ファイルを処理することだけでした。
私がすでに持っているその構造:
<address ref="file1" title="title1">
<address ref="file1.1" title="title1.1">
<address ref="file1.1.1" title="title1.1.1"/>
</address>
<address ref="file1.2" title="title1.2">
<address ref="file1.2.1" title="title1.2.1"/>
<address ref="file1.2.2" title="title1.2.2">
<address ref="file1.2.2.1" title="title1.2.2.1"/>
<address ref="file1.2.2.2" title="title1.2.2.2"/>
</address>
</address>
</address>
<address ref="file2" title="title2"/>
しかし、私は次のようにする必要があります:
<address ref="mydir/file1" title="title1">
<address ref="mydir/file1.1" title="title1.1">
<address ref="mydir/file1.1.1" title="title1.1.1"/>
</address>
<address ref="mydir/file1.2" title="title1.2">
<address ref="mydir/file1.2.1" title="title1.2.1"/>
<address ref="mydir/file1.2.2" title="title1.2.2">
<address ref="mydir/file1.2.2.1" title="title1.2.2.1"/>
<address ref="mydir/file1.2.2.2" title="title1.2.2.2"/>
</address>
</address>
</address>
<address ref="mydir/file2" title="title2"/>
最初の要素を希望どおりに変更できましたが、Xquery エンジンが受け入れる方法で正しく変更することはできません。
BaseX 7.6 のこのコードで最初の要素を変更しましたが、それをすべての要素に適用する方法がわかりません。
copy $c :=
(<address ref="file1" title="title1">
<address ref="file1.1" title="title1.1">
<address ref="file1.1.1" title="title1.1.1"/>
</address>
<address ref="file1.2" title="title1.2">
<address ref="file1.2.1" title="title1.2.1"/>
<address ref="file1.2.2" title="title1.2.2">
<address ref="file1.2.2.1" title="title1.2.2.1"/>
<address ref="file1.2.2.2" title="title1.2.2.2"/>
</address>
</address>
</address>
(:<address ref="file2" title="title2"/> WHY IS THIS NOT BY THE WAY ACCEPTED?:)
)
modify (
replace value of node $c/@ref with concat('mydir/', $c/@ref)
)
return $c
この問題を解決しようとした方法に関する情報は、http: //docs.basex.org/wiki/XQuery_Update#Non-Updating_Expressionsにあります。
BaseX はこれを行うための優れたツールだと感じています。私はそれを行う方法を理解できません。この場合、どういうわけか再帰も答えだと思います。まだ経験が浅いのでわかりません。
前もって感謝します!