我正在尝试使用此代码在XQuery中获得序列的结果
let $productNenner := 1
let $productNenner := sum(for$x in doc("bruch.xml")/product/fraction
return data($x/numerator) * $productNenner)
return $productNenner
嗯,它不起作用。认为这是因为变量在xquery中是不可变的。 但是我如何获得产品? 我的XML代码专家看起来像
<product>
<fraction>
<numerator>1</numerator>
<denominator>2</denominator>
</fraction>
<fraction>
<numerator>3</numerator>
<denominator>4</denominator>
</fraction>
<fraction>
<numerator>5</numerator>
<denominator>6</denominator>
</fraction>
</product>
我将构建不同分数的乘积,例如1/2 * 3/4 * 5/6。希望有人可以帮助我。谢谢:)
答案 0 :(得分:3)
似乎像fold-left
(https://www.w3.org/TR/xpath-functions/#func-fold-left)的工作:
fold-left(/product/fraction, 1, function($a, $b) { $b/numerator div $b/denominator * $a })
或者自己实施:
declare function local:fold-product(
$seq as item()*,
$zero as item()*)
as item()* {
if (fn:empty($seq))
then $zero
else local:fold-product(tail($seq), head($seq)/numerator div head($seq)/denominator * $zero)
};
local:fold-product(/product/fraction, 1)