XQuery 不执行
XQuery doesnt execute
我有一个 XQuery 问题:
{
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>
}
使用 Saxon9 执行此 XQuery 会产生以下错误:
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
但我不明白为什么。在同一个文件中,有一个非常相似的 XQuery 表达式,完全没有问题...
有谁能指出我的错误所在吗?
编辑:
但是,为什么这可以正常工作呢? :
{
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>
}
你的 return
太多了。您的代码:
return
if (...) then ...
return ...
else
return ...
应该是:
return
if (...) then ...
else ...
XQuery spec defines an if-statement为:
IfExpr ::= "if" "(" Expr ")" "then" ExprSingle "else" ExprSingle
ExprSingle
可以是一个值或另一个表达式。你的第二个例子是后一种情况:then
分支后面的 let
暗示它是一个 FLWOR
类型的表达式,因此必须包含一个 return
。很简单:使用 for
或 let
需要 return
.
有关 XQuery 语法的更多信息,请see the spec 或许多对其进行更简单解释的在线资源。
我有一个 XQuery 问题:
{
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>
}
使用 Saxon9 执行此 XQuery 会产生以下错误:
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
但我不明白为什么。在同一个文件中,有一个非常相似的 XQuery 表达式,完全没有问题...
有谁能指出我的错误所在吗?
编辑: 但是,为什么这可以正常工作呢? :
{
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>
}
你的 return
太多了。您的代码:
return
if (...) then ...
return ...
else
return ...
应该是:
return
if (...) then ...
else ...
XQuery spec defines an if-statement为:
IfExpr ::= "if" "(" Expr ")" "then" ExprSingle "else" ExprSingle
ExprSingle
可以是一个值或另一个表达式。你的第二个例子是后一种情况:then
分支后面的 let
暗示它是一个 FLWOR
类型的表达式,因此必须包含一个 return
。很简单:使用 for
或 let
需要 return
.
有关 XQuery 语法的更多信息,请see the spec 或许多对其进行更简单解释的在线资源。