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 的“真”到“假”,我希望将此更新写入文件中。当我使用 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 更新语法。正如错误消息已经表明的那样,没有replace ... with ... into ...命令,只有。replace ... with ...这也是不合逻辑的,因为$update已经拥有对正确 xml 片段的引用。

因此,您只需使用以下 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 回答