首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XQuery不执行

XQuery不执行
EN

Stack Overflow用户
提问于 2015-03-30 16:12:05
回答 1查看 108关注 0票数 0

我有一个XQuery问题:

代码语言:javascript
复制
{
let $x := $document//AOSCAT_MetricDetail//table[@class="pretty-table"]
          //tr/td[8]/text()
let $sum_of_statements_per_method := sum(
          for $a at $i in $x where $a != 0.0 return $a 
    )
let $count_of_statements_per_method := count(
          for $a at $i in $x where $a != 0.0 return $a 
    )
return
if ($count_of_statements_per_method != 0) then
    return <average_statements_per_method>{ 
       $sum_of_statements_per_method 
       div 
       $count_of_statements_per_method 
    }</average_statements_per_method>   
else
    return <average_statements_per_method> 
       No data available 
    </average_statements_per_method>    
}

使用XQuery执行此Saxon9会产生以下错误:

代码语言:javascript
复制
Error on line 103 column 39 of transform_2.xq:
  XPST0003: XQuery syntax error in #...verage_statements_per_method>{#:
    expected "else", found ">"
Static error(s) in query

但我不明白为什么。在同一文件中,a有一个非常相似的XQuery表达式,根本没有问题.

有人能告诉我我的错误在哪里吗?

编辑:但是为什么这样做还可以呢?:

代码语言:javascript
复制
{
let $content_check := $document//AOSCAT_MainReport//div[@class="reportpart"][4]/h2/text()
return
if($content_check="Abstraction analysis") then                                                              
let $abstraction := $document//AOSCAT_MainReport//div[@class="reportpart"][4]/table//tr[2]//td[5]
    return <abstraction_level>{ fn:number(fn:normalize-space($abstraction))*100 }</abstraction_level>
else 
    let $abstraction := 0
    return <abstraction_level>{ $abstraction }</abstraction_level>  
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-30 16:18:00

您有太多的returns。您的代码:

代码语言:javascript
复制
return 
  if (...) then ...
    return ...
  else
    return ...

应:

代码语言:javascript
复制
return 
  if (...) then ...
  else ...

XQuery规范定义了if-语句。为:

代码语言:javascript
复制
IfExpr  ::=  "if" "(" Expr ")" "then" ExprSingle "else" ExprSingle

ExprSingle可以是值,也可以是其他表达式。第二个例子是后一种情况:let后面的then分支意味着它是一个FLWOR-type表达式,因此必须包括一个return。简单地说:使用forlet需要return

有关XQuery语法的更多信息,请见规范或更简单地解释它的许多在线资源。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29351094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档