Xml BaseX:更新不会被写回
我试图在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> 转
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命令可用于将数据库的所有资源写入磁盘
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
中的数据文件。与其向数据库添加资源,不如将其称为“导入”,作为“导出”的对立面。