我正在尝试在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>
我希望它返回修改后的数据,但它会执行并且不返回任何内容。
它说Updates are not written back
如何查看已修改的entry
?哪些命令返回更改的数据?
答案 0 :(得分:3)
引自http://docs.basex.org/wiki/XQuery_Update:
在BaseX中,所有更新都在数据库节点或主节点上执行 记忆。默认情况下,更新操作不会影响原始输入 文件(信息字符串“未写回更新”出现在 查询信息以表明这一点)。编写以下解决方案 XML文档和二进制资源到磁盘:
- 通过fn:doc或fn:collection检索到的文件的主内存实例的更新将传播回磁盘 打开WRITEBACK选项时。这个选项也可以 通过-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'