了解XQuery中的for循环以计算BaseX中的出现次数

时间:2016-02-19 09:16:41

标签: for-loop xquery basex

我正在尝试计算BaseX中XML结构的出现次数。

declare variable $a := 0;
for $node in db:open("My_DB")/my/xml//path
$a += 1

return $a

运行时,BaseX会返回错误:不完整的FLWOR表达式:期待'返回'。

我知道我可以依靠这个简单的功能:

count(db:open("My_DB")/my/xml//path)

但是有两个原因我想用for循环来做这个:

  1. 我的主管告诉我,for循环更快
  2. 将来我可能希望每次点击执行更多操作(在for循环中)
  3. 所以问题是:如何使用BaseX使用XQuery计算for循环中的元素。

1 个答案:

答案 0 :(得分:1)

由于XQuery是一种函数式语言,因此无法将其他值重新分配给函数。但是,您可以使用fold-left在循环中递增值:

fold-left(db:open("My_DB")/my/xml//path, 0, function($result, $curr) {
  $result + 1
})

count()的执行时间取决于XQuery的实现。在BaseX中,count()通常比循环快得多,因为在许多情况下,它可以通过数据库统计信息中的查找来加速。