Zorba XQuery Processor を使用して複数の XML ファイルを更新し、変更の出力を同じファイルに保存する簡単な方法はありますか?
ここまでで、File モジュールと file:list 拡張子を使用して複数のファイルを処理し、ディレクトリ内のすべての XML ファイルを検索する方法を理解しました。次に、各ドキュメントをループし、XQuery Update ステートメントを実行します (ノード {} の値を {} に置き換えます)。問題は、これが実際にファイルを変更しないことです。
以前は Saxon を使用していましたが、この特定のプロジェクトにはライセンス コストが高すぎます。Saxon EE では、開いているドキュメントで「ノードの値を置換」を実行すると、クエリが終了したときにドキュメントがディスク上で更新されます。Zorba はこのようには機能せず、代わりにクエリ中にメモリ内の値を変更するだけだと思います。1 つのファイルを編集している場合は、変更した XML を Zorba で出力し、それをパイプで入力ファイルに戻しますが、この場合は多くのファイルを更新する必要があります。それは1つのクエリで可能ですか?
コードは次のようになります。
import module namespace file = "http://expath.org/ns/file";
for $file in file:list("XML", true(), "*.xml")
let $doc := doc(concat("XML/", $file))
return
{
for $key in $doc//key
return
replace value of node $key/texture
with replace($key/material/text(), ".mat", ".png")
}