我有一个存储协议的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>
我需要更改/更新标记的值&#34; valido&#34;,例如来自&#39; true&#39;到&#39;假&#39; protocollo编号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'
所以我的查询错了,但我不知道在哪里。 你能救我吗?
答案 0 :(得分:1)
失败,因为它是无效的XQuery Update语法。没有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