XQuery更改属性值并返回上一个属性值
我试图更新一个节点的属性值,并在一个查询中返回它以前的值,但我找不到一种方法。我使用的是XML/XQuery数据库 目前,我已经尝试过这样做:XQuery更改属性值并返回上一个属性值,xquery,basex,Xquery,Basex,我试图更新一个节点的属性值,并在一个查询中返回它以前的值,但我找不到一种方法。我使用的是XML/XQuery数据库 目前,我已经尝试过这样做: /Root/Elem/properties/property[@id='17']/@format, replace value of node /Root/Elem/properties/property[@id='17']/@format with 'URL' 还有: for $prop in /Root/Elem/properties/proper
/Root/Elem/properties/property[@id='17']/@format,
replace value of node /Root/Elem/properties/property[@id='17']/@format with 'URL'
还有:
for $prop in /Root/Elem/properties/property[@id='17']
let $format := $prop/@format
return (replace value of node $prop/@format with 'URL', $format)
和多个其他测试,但都会导致以下错误:
List expression: no updating expression allowed.
这是BaseX的限制还是在XQuery中不可能?XQuery Update不允许从更新查询返回结果。但是,您可以使用BaseX的专有功能来实现这一点:
for $prop in /Root/Elem/properties/property[@id='17']
let $format := $prop/@format
return (replace value of node $format with 'URL', update:output($format))
是的,我在BaseX文档中看到了这个专有函数,但希望有一个更通用的方法。所以,在Xquery中,您必须执行两个连续的查询来获得一个值,然后对其进行更改?没有其他方法吗?转换方法呢?BaseX/XQuery更新中没有其他方法。转换不是持久的,因此只能更改临时副本。也许也可以使用,但我不知道,BaseX也不支持。关于官方的XQuery更新工具,您可能很幸运地听到,XQUF 3.1中有一些计划同时支持更新和结果。谢谢您的评论。至少现在我知道这是XQuery的一个真正限制(目前),BaseX提供了一个替代方案。