0

次のような構造のプロトコルを格納する file.xml があります。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<economato> 
  <protocollo>
    <numero>1</numero>
    <data>2014-12-15</data>
    <oggetto>Trasmissione prospetti di rendiconto chiusura esercizio 2012 - beni mobili proprietà dello stato</oggetto>
    <destinatario>Ragioneria Provinciale Como</destinatario>
    <operatore>MAESTRI</operatore>
    <valido>true</valido>
  </protocollo>
  ...
</economato>

タグ「valido」の値を変更/更新する必要があります。たとえば、プロトコル番号1の「true」から「false」に変更する必要があり、この更新をファイルに書き込む必要があります。BaseX を使用しているため、ドキュメントに従って、次のクエリを作成しようとしました。

xquery let $update := doc('C:\Users\Lorenzo Enzino  Vinci\Desktop\ECONOMATO\databases\2014.xml')//economato/protocollo[numero = 1] return replace value of node $update/valido with 'false' into doc('C:\Users\Lorenzo Enzino Vinci\Desktop\ECONOMATO\databases\2014.xml')//economato

しかし、私は次のようなエラーが発生します

[XPST0003] Unexpected end of query: 'into doc('C:\Users\Lorenzo Enzino Vinci\Desktop\ECONOMATO\databases\2014.xml')//economato'

私のクエリは間違っていますが、どこにあるのかわかりません。手伝って頂けますか?

4

1 に答える 1

1

XQuery Update 構文が無効であるため、失敗します。エラーメッセージがすでに示しているように、replace ... with ... into ...コマンドはありません。正しい xml フラグメントへの参照が既に保持されているreplace ... with ...ため、これも非論理的です。$update

したがって、次の XQuery を使用するだけです。

let $update := doc('C:\Users\Lorenzo Enzino  Vinci\Desktop\ECONOMATO\databases\2014.xml')//economato/protocollo[numero = 1]
return replace value of node $update/valido with 'false'

また、更新はファイル システム内のファイルに自動的に書き戻されないことに注意してください (誤ってファイルを上書きしないようにするため) basex -u。これはBaseX wikiで詳しく説明されています

于 2014-12-16T11:39:40.520 に答える