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>
为什么不运行,而是提示我有一个错误说:
期望的"返回",发现",如果("
(
请帮助解决此问题,还检查铸造到小数点是否还可以吗?对于$ 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
)
现在说:
预期"(,"找到":="
需要更新$ x和$ y,然后重新运行下一个n值的循环,因为需要满足给定的条件。
if
不是flwor的有效元素。
一个选项是使用where
:
where ($lhs = $rhs)
return <t>...</t>
另一个只是将if
移至return
:
return if ($lhs = $rhs) then <t>...</t> else ()