我有一个相当简单的XQuery函数,它返回一系列ID。
declare function local:get-ids($param as xs:string) {
...do something...
return $ids
}
我想要做的是组合这样的返回值:
for $ids in local:get-ids("something") | fn:subsequence(local:get-ids("something else"), 5)
但是,这不起作用。我收到一条错误,说其中一个ID不是节点。我可以单独使用每个序列来运行它,但是当我尝试将它们组合时它会失败。这样做的正确方法是什么?
感谢和GT;
答案 0 :(得分:2)
xquery中没有嵌套序列,所以你可以像这样连接两个序列:
let $s1 := ('a', 'b')
let $s2 := ('a', 'c')
return ($s1, $s2)
结果只是(' a'''' a'' c'),所以在你的情况下你可以这样做:
for $ids in (local:get-ids("something"), fn:subsequence(local:get-ids("something else"), 5))
可选地,您可以将其包装在distinct-values(....)中以仅获取不同的ID
答案 1 :(得分:0)
您没有声明local :: get-ids()函数的返回类型,但要从错误消息判断,它返回的是字符串,而不是节点。 union运算符仅适用于节点序列;组合值序列,您可以使用逗号(如果您不需要删除重复值)或逗号,然后使用distinct-values(如果您这样做):
for $ids in (local:get-ids("something"),
fn:subsequence(local:get-ids("something else"),
5)
...
或
for $ids in distinct-values( (local:get-ids("something"),
fn:subsequence(local:get-ids("something else"),
5))
...