Xml BaseX:更新不会被写回

Xml BaseX:更新不会被写回,xml,xquery,updating,basex,Xml,Xquery,Updating,Basex,我试图在BaseX中运行以下查询 let $c := doc('t.xq')//entry return (replace value of node $c/author with 'BaseX' ) 输入文件t.xq为 <entry> <title>Transform expression example</title> <author>BaseX Team</author> </entry> 转

我试图在BaseX中运行以下查询

let $c := doc('t.xq')//entry return (replace value of node $c/author with 'BaseX' )
输入文件
t.xq

<entry>
    <title>Transform expression example</title>
    <author>BaseX Team</author>
  </entry>

转换表达式示例
巴塞克斯队
我希望它返回修改后的数据,但它执行后什么也不返回。 它说,
更新不会回写

如何查看已修改的
条目
?哪些命令返回更改的数据?

引用自:

在BaseX中,所有更新都在数据库节点或主节点上执行 记忆。默认情况下,更新操作不会影响原始输入 文件(信息字符串“更新未回写”显示在 查询信息以表明这一点)。有以下解决方案可供编写 将XML文档和二进制资源存储到磁盘:

  • 通过fn:doc或fn:collection检索的文件的主内存实例的更新将传播回磁盘 当“写回”选项处于启用状态时。此选项也可以是 通过-u在命令行上激活。确保你备份了原始文件 在运行查询之前先创建文档
  • fn:put或file:write等函数可用于将单个XML文档写入磁盘。使用file:write binary,您可以编写二进制文件 资源
  • EXPORT命令可用于将数据库的所有资源写入磁盘
但是,如果只需要获取update命令的输出,则可以将其复制到变量(内存中)并按如下方式转换此变量:

copy $c := doc('t.xq')//entry
modify (
  replace value of node $c/author with 'BaseX'
)
return $c
您还可以使用
update
,这是一个方便的运算符,用于编写简单的转换表达式

doc('t.xq')//entry update replace value of node ./author with 'BaseX'

请注意,BaseX有一个简写的
update
关键字(请参阅),以简化转换表达式。您的代码与
doc('t.xq')//entry update replace value of node./author with'BaseX'
相同,我觉得这有点奇怪,因为如果默认情况下输入资源只是“加载”了,并且再也没有接触过,为什么还要维护对输入资源的引用呢?真正的数据库现在是
~/BaseXData
中的数据文件。与其向数据库添加资源,不如将其称为“导入”,作为“导出”的对立面。