XQuery中序列的乘积

时间:2018-07-19 09:33:14

标签: xml xquery

我正在尝试使用此代码在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。希望有人可以帮助我。谢谢:)

1 个答案:

答案 0 :(得分:3)

似乎像fold-lefthttps://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)

https://xqueryfiddle.liberty-development.net/3Nqn5Y6