0

在 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 语言中的更新/返回概念。我希望有人可以对这些问题有所了解。

4

0 回答 0