【问题标题】:product of a sequence in XQueryXQuery 中序列的乘积
【发布时间】:2018-07-19 09:33:13
【问题描述】:

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

【问题讨论】:

    标签: xml xquery


    【解决方案1】:

    似乎是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)
    

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

    【讨论】:

    • 感谢您的建议,我会这样尝试
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多