XQuery:如果条件在double中

时间:2019-05-09 17:16:09

标签: xml xquery

我正在尝试在if语句内(在double内)更新$ numMatches变量,以跟踪XML文档中各个团队进行的比赛。该代码引发错误。

伪逻辑是:

“对于团队中的每个团队,对于每场比赛,如果团队的ID与本地或访客球员的ID相等,则将该团队进行的比赛数量加1。”

我尝试过的XQuery是:

<resumen>    
{ for $teams in ligue/teams/team

    let $numMatches := 0

    for $matches in ligue/match_results/match

        if ($teams/team_id = $matches/local) or ($teams/team_id = 
        $matches/visitor) then

        $numMatches := $numMatches + 1

    return <teamAndMatches>{$teams/name/data()}-{$numMatches}</teamAndMatches>   
}
</resumen>

那里是一个错误,因为XBase说它期望返回。错误在哪里?我是这种语言的新手。谢谢!

2 个答案:

答案 0 :(得分:2)

  

XQuery(XML查询)是一种查询和功能编程语言,用于查询和转换结构化和非结构化数据的集合,通常以XML,文本的形式出现,并且具有其他数据格式(JSON,二进制等)的特定于供应商的扩展名)。

引自WikiPedia XQuery article

  

XQuery是一种功能编程语言,这意味着变量是不可变的。

引自this SO answer

因此您不能像这样更新变量

$numMatches := $numMatches + 1

因为变量是不可变的。
您是从命令式范式中思考的,这不适用于此处。

如果您想解决这个难题,请尝试从功能范例中进行思考,然后对该程序进行递归编程(这可能意味着将计数器作为参数传递给递归函数)。

答案 1 :(得分:2)

有一个DataGrid函数

count

就足够了。