BaseX:不会写回更新

时间:2015-06-13 06:20:25

标签: 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>

我希望它返回修改后的数据,但它会执行并且不返回任何内容。 它说Updates are not written back

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

1 个答案:

答案 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'