我的数据是二叉树,将检查每个孩子,如果找到我想要的数据则返回true,否则,它会继续查找。 在某种程度上,我想要返回变量@exists或者其他东西..任何人都可能有我的问题的解决方案。我在想这样的事情,但我无法让它发挥作用! (代码片断)
declare function local:test($id as xs:integer, $topic as xs:integer) as xs:boolean {
let $exists := fn:false()
for $x in ...
return
if .. then
set exists to fn:true()
else
set exists to exists OR local:test($x,$topic)
return @exists in some way
};
答案 0 :(得分:2)
这是XQuery quantified expression的一个案例。使用它,您的功能转换为
declare function local:test($id as xs:integer, $topic as xs:integer) as xs:boolean
{
some $x in ...
satisfies
if (..) then
fn:true()
else
local:test($x,$topic)
};
答案 1 :(得分:1)
正如已经提到的,XQuery是一种功能语言。你不能只设置变量并返回它。您的查询可以重写为:
declare function local:test($id as xs:integer, $topic as xs:integer) as xs:boolean {
exists(for $x in ...
where (: here is condition expression on $x :)
return $x)
};
如果exists(Expr)
的值不是空序列,则函数true
返回Expr
;否则,函数返回false
。
在这种情况下exists
如果true
符合指定条件,则会返回$x
。
答案 2 :(得分:0)
您无法更改xquery中的变量值。
你的整个功能不只是这个:
declare function local:test($topic as xs:integer) as xs:boolean {
... OR local:test($topic/...)
};