在 BaseX 7.7.2 中使用 XQuery,我想用一些变量值填充模板节点并将其插入到文档中,并且只返回新创建的节点,而不是我插入的上下文节点。
(: define an "auto-increment" id :)
let $nextId := if( exists( //company/id ) ) then max( //company/id ) + 1 else 1
(: fill the template node (a simplified example node) :)
let $company := <company><id>{ $nextId }</id></company>
(: insert the new node :)
return insert node $company into /companies
这行得通。但是,我不希望它返回/companies
,而只是返回新的 node $company
。
但是,如果我将查询更改为以下内容,它将不再起作用。
(: insert the new node; does not work :)
insert node $company into /companies
(: only return the newly created node :)
return $company
为什么我不允许在 FLWOR 语句中在返回某些内容之前执行中间更新操作?为什么在 FLWOR 表达式中必须使用 return 语句?
编辑:
在查看此XQuery 语法文档后,似乎我根本不应该使用 FLWOR 表达式开始,而只是使用declare variable
语句而不是let
语句。但是,在那种情况下,我仍然不知道如何返回新创建的节点,如果完全可以在不使用 FLWOR 表达式的情况下显式返回某些内容的话。
默认情况下,似乎任何更新语句(无论有或没有 FLWOR)都会简单地返回完整的文档作为结果。由于我预计此文档在某些时候可能会变得非常大,因此我不希望通过网络将其与每个更新语句一起发送。
如您所知,我有点难以理解 XQuery 语言中的更新/返回概念。我希望有人可以对这些问题有所了解。