我正在尝试计算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循环来做这个:
所以问题是:如何使用BaseX使用XQuery计算for循环中的元素。
答案 0 :(得分:1)
由于XQuery是一种函数式语言,因此无法将其他值重新分配给函数。但是,您可以使用fold-left在循环中递增值:
fold-left(db:open("My_DB")/my/xml//path, 0, function($result, $curr) {
$result + 1
})
count()
的执行时间取决于XQuery的实现。在BaseX中,count()
通常比循环快得多,因为在许多情况下,它可以通过数据库统计信息中的查找来加速。