我有一个相当复杂的 XML 文件,我需要使用 XSL 对其中的一些值进行加权平均。我能够完成权重或值的总和,但我无法使乘法起作用。我收到错误:
XPTY0004:不允许将多个项目作为第一个项目
'*' 的操作数
我无法共享 XML,但我已将 XML 简化为以下示例(假设有大量 foo):
<group>
<fooList>
<foo>
<attributeList>
<Attribute ID="1" Weight="0.5">
<otherParams />
</Attribute>
</attributeList>
<Properties>
<PhysicalProperties>
<Volume Average="125" Unknown="50" />
</PhysicalProperties>
</Properties>
</foo>
</fooList>
</group>
我目前获得加权平均值的尝试如下:
<xsl:variable name="WeightedVolume" select="sum(/group/fooList/foo[attributeList/Attribute/[@ID=$test_id]]/attributeList/Attribute/@Weight * /group/fooList/foo[attributeList/Attribute/[@ID=$test_id]]/Properties/PhysicalProperties/Volume/@Average)"/>
我知道有类似的问题 - 但大多数都涉及诸如求和和乘法 foo 之类的问题
<foo>
<Weight>0.5</Weight>
<VolumeAverage>125</VolumeAverage>
</foo>
关于这个问题的答案堆栈溢出问题对我很有吸引力,但我似乎无法让它发挥作用。
我正在使用 Saxonica 的 Saxon-HE 9.5.1.1N 和 Visual Studio 2013。
Edited我能够得到一些适用于 XSL 2 的东西,但需要为 XSL1 提供一个后备方案。
<xsl:variable name="WeightedVolume" select="sum(for $i in /group/FooList/foo[attributeList/Attribute[@ID=$test_id] return $i/AttributeList/Attribute/@Weight * $i/Properties/PhysicalProperties/Volume/@Average)"/>