Xml 在Xquery中按顺序乘以所有值

Xml 在Xquery中按顺序乘以所有值,xml,xpath,xquery,Xml,Xpath,Xquery,我有一个具有以下结构的xml文档: <class> <element>1</element> <element>2</element> <element>3</element> </class> <class> <element>10</element> <element>82</element>

我有一个具有以下结构的xml文档:

<class>
    <element>1</element>
    <element>2</element>
    <element>3</element>
  </class>
  <class>
    <element>10</element>
    <element>82</element>
    <element>31</element>
  </class>
...

1.
2.
3.
10
82
31
...

我想返回将每个类的所有元素相乘的结果。我试图创建一个计数器,将每个元素乘以返回它的计数器,但我无法让它工作。有人能帮忙吗?

您需要声明自己的函数,例如:

declare function local:multiplytail($seq, $i, $res) {
    if ($i le 0) then $res
    else local:multiplytail($seq, $i - 1, $res*number($seq[$i]))
};
declare function local:multiply($seq) {
    local:multiplytail($seq, count($seq), 1)
};

//class/local:multiply(element)

如果您的处理器支持XQuery3.0,那么您还可以使用fn:fold left(…),这比imho更优雅。