XQuery:组合序列

时间:2014-05-27 15:24:42

标签: xquery

我有一个相当简单的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;

2 个答案:

答案 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))
...