XQuery-无界结构中元素值的值之和

XQuery-无界结构中元素值的值之和,xquery,Xquery,我试图从下面的结构中获得特定字段的值之和,但它似乎不起作用,因为我得到的错误为预期的零或一个值,但得到了两个或更多 <v4:CalculateResponse xmlns:v4="http://services.xx.net/mm/va"> <v4:CalculateResponseSizeType> <v4:CalculateCCs> <v4:Container>

我试图从下面的结构中获得特定字段的值之和,但它似乎不起作用,因为我得到的错误为预期的零或一个值,但得到了两个或更多

 <v4:CalculateResponse xmlns:v4="http://services.xx.net/mm/va">
       <v4:CalculateResponseSizeType>
          <v4:CalculateCCs>
             <v4:Container>
                <v4:GrossBookedWeight>31.6</v4:GrossBookedWeight>
                <v4:NetPredictedWeight>50</v4:NetPredictedWeight>
                <v4:GrossPredictedWeight>53.6</v4:GrossPredictedWeight>
                <v4:TypeOfWeightUsed>P</v4:TypeOfWeightUsed>
             </v4:Container>
             <v4:Container>
                <v4:GrossBookedWeight>31.6</v4:GrossBookedWeight>
                <v4:NetPredictedWeight>50</v4:NetPredictedWeight>
                <v4:GrossPredictedWeight>53.6</v4:GrossPredictedWeight>
                <v4:TypeOfWeightUsed>B</v4:TypeOfWeightUsed>
             </v4:Container>
             <v4:Container>
                <v4:GrossBookedWeight>31.6</v4:GrossBookedWeight>
                <v4:NetPredictedWeight>50</v4:NetPredictedWeight>
                <v4:GrossPredictedWeight>53.6</v4:GrossPredictedWeight>
                <v4:TypeOfWeightUsed>B</v4:TypeOfWeightUsed>
             </v4:Container>
             <v4:Container>
                <v4:GrossBookedWeight>31.6</v4:GrossBookedWeight>
                <v4:NetPredictedWeight>50</v4:NetPredictedWeight>
                <v4:GrossPredictedWeight>53.6</v4:GrossPredictedWeight>
                <v4:TypeOfWeightUsed>P</v4:TypeOfWeightUsed>
             </v4:Container>
      </v4:CalculateCCs>
   </v4:CalculateResponseSizeType>
   <v4:Status>P</v4:Status>
   <v4:StatusCode>1000</v4:StatusCode>
</v4:CalculateResponse>

31.6
50
53.6
P
31.6
50
53.6
B
31.6
50
53.6
B
31.6
50
53.6
P
P
1000
我试着用下面的函数求这些值的和,但看起来好像只求了一个值

<Weight>
        {
        sum(
            data($calculateResponse1/*:CalculateResponseSizeType/*:CalculateCCs/*:Container[data(*:TypeOfWeightUsed) = "B"]/*:GrossBookedWeight), 
            data($calculateResponse1/*:CalculateResponseSizeType/*:CalculateCCs/*:Container[data(*:TypeOfWeightUsed) = "P"]/*:GrossPredictedWeight)
        )

    }
</Weight>

{
总数(
数据($calculateResponse1/*:CalculateResponseSizeType/*:CalculateECCS/*:容器[数据(*:TypeOfWeightUsed)=“B”]/*:GrossBookWeight),
数据($calculateResponse1/*:CalculateResponseSizeType/*:CalculateECCS/*:容器[数据(*:TypeOfWeightUsed)=“P”]/*:总预计重量)
)
}
这里的计算很简单,假设TypeOfWeightUsed=0,那么我想使用GrossPredictedWeight元素值,或者如果TypeOfWeightUsed=B,那么我想使用GrossBookedWeight

我们可以在一个结构中有多个容器

请说明以上syntex的问题

这里的计算很简单,假设TypeOfWeightUsed=0,那么我想使用GrossPredictedWeight元素值,或者如果TypeOfWeightUsed=B,那么我想使用GrossBookedWeight

您可以在
if else
构造的帮助下使用flower表达式来获取执行
求和()所需的所有数字。

这里的计算很简单,假设TypeOfWeightUsed=0,那么我想使用GrossPredictedWeight元素值,或者如果TypeOfWeightUsed=B,那么我想使用GrossBookedWeight

您可以在
if else
构造的帮助下使用flower表达式来获取执行
求和()所需的所有数字。

当sum()函数有两个参数时,第二个参数提供一个值,当第一个参数为空序列时用作结果。(如果没有静态类型检查,sum()函数无法区分空的double序列和空的duration序列,并且在对duration进行求和时,不希望得到整数零的结果,这是一种笨拙的处理方法)

您使用两个参数调用了函数,但我认为您希望将两个序列都视为要求和的输入。只需添加另一对括号,使其成为单个参数:将
sum(x,y)
替换为
sum((x,y))

出现错误的原因是,如果提供了第二个参数,则该参数必须是单例值,而不是序列。

当sum()函数有两个参数时,当第一个参数为空序列时,第二个参数提供一个值作为结果。(如果没有静态类型检查,sum()函数无法区分空的double序列和空的duration序列,并且在对duration进行求和时,不希望得到整数零的结果,这是一种笨拙的处理方法)

您使用两个参数调用了函数,但我认为您希望将两个序列都视为要求和的输入。只需添加另一对括号,使其成为单个参数:将
sum(x,y)
替换为
sum((x,y))


出现错误的原因是,如果提供了第二个参数,则该参数必须是单例值,而不是序列。

是否可以粘贴得到的确切错误?另外,了解您使用的是什么XQuery实现可能会有所帮助。您可以粘贴得到的确切错误吗?另外,了解您正在使用的XQuery实现可能会有所帮助。
<Weight>
{
    sum(
        for $c in $calculateResponse1/*:CalculateResponseSizeType/*:CalculateCCs/*:Container
        return 
            if($c/*:TypeOfWeightUsed = "B") then $c/*:GrossBookedWeight
            else $c/*:GrossPredictedWeight
    )
}
</Weight>
<Weight>170.4</Weight>