XQuery:期待"返回"发现" if("错误

时间:2018-04-27 18:11:44

标签: xml xquery

XML文件是<n>个标记的列表,每个标记都包含一个数字,按<n>标记内的数字按升序排序。需要找出其中三个是否满足x ^ 2 + y ^ 2 = z ^ 2

这是我的代码:

declare function local:square($k as xs:decimal?)
as xs:decimal? {
   let $sq := ($k * $k) 
   return $sq
};

declare function local:square_sum($a as xs:decimal?,$b as xs:decimal?)
as xs:decimal? {
   let $sqsum := (local:square($a) + local:square($b)) 
   return $sqsum
};

<result>{
let $doc := doc("emp.xml")/list
let $x := 0
let $y := 0

for $z in //n
    let $zconv := xs:decimal($z/text())
    let $lhs := local:square( $zconv )
    let $rhs := local:square_sum($x, $y)
    if ($lhs = $rhs) then (
    return <t>
                <n>{$x}</n>
                <n>{$y}</n>
                <n>{$zconv}</n>
           </t>
    )

}</result>

为什么它没有运行,而是提示我一个错误说:

  

预期&#34;返回&#34;,找到&#34; if(&#34;

请帮助排除这一点,还要检查是否可以投射到十进制?对于$ zconv

根据建议更改代码:

for $z in //n
let $zconv := xs:decimal($z/text())
let $lhs := local:square( $zconv )
let $rhs := local:square_sum($x, $y)
return if ($lhs = $rhs) 
then (   <t>
            <n>{$x}</n>
            <n>{$y}</n>
            <n>{$zconv}</n>
        </t>
)
else (
    $x := $y
    $y := $zconv
)

现在说:

  

预期&#34;)&#34;,找到&#34;:=&#34;

需要更新$ x和$ y然后重新运行下一个n值的循环,因为需要满足给定的条件。

1 个答案:

答案 0 :(得分:2)

if不是FLWOR的有效元素。

一种选择是使用where

where ($lhs = $rhs)
return <t>...</t>

另一种方法是将if移到return

return if ($lhs = $rhs) then <t>...</t> else ()