我试图让for-each-group
在我的xml中没有成功工作,我想将我的refdes-tags中的区域分组,并计算每个区域的价格总和。
如果我在一个项目下有多个具有相同区域的refdes,它只计算总和中的第一个但我想要全部计算。
输入:
<part>
<bom>
<item partnumber="1">
<refdes area="area1">010</refdes>
<price>0.5</price>
</item>
<item partnumber="2">
<refdes area="area2">020</refdes>
<price>1.0</price>
</item>
<item partnumber="3">
<refdes area="area1">030</refdes>
<refdes area="area1">060</refdes>
<refdes area="area2">070</refdes>
<price>0.3</price>
</item>
</bom>
</part>
的xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:template match="/">
<table class="sortable" id="odd">
<tr>
<th>Area</th>
<th>Price</th>
</tr>
<xsl:for-each-group select="part/bom/item/refdes" group-by="@area">
<xsl:sort select="@area" data-type="text" order="ascending"/>
<xsl:element name="tr">
<td>
<xsl:value-of select="current-grouping-key()" />
</td>
<td>
<xsl:value-of select="sum(current-group()/../price)" />
</td>
</xsl:element>
</xsl:for-each-group>
</table>
</xsl:template>
</xsl:stylesheet>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<table class="sortable" id="odd">
<tr>
<th>Area</th>
<th>Price</th>
</tr>
<tr>
<td>area1</td>
<td>0.8</td>
</tr>
<tr>
<td>area2</td>
<td>1.3</td>
</tr>
</table>
通缉输出:
<?xml version="1.0" encoding="UTF-8"?>
<table class="sortable" id="odd">
<tr>
<th>Area</th>
<th>Price</th>
</tr>
<tr>
<td>area1</td>
<td>1.1</td>
</tr>
<tr>
<td>area2</td>
<td>1.3</td>
</tr>
</table>
答案 0 :(得分:3)
问题是,对于area
属性为&#34; area1&#34;的情况,只涉及两个price
个节点。 sum
函数不会多次对同一节点求和。 (将sum
更改为count
,您会看到它返回2)。
尝试将语句更改为此
<xsl:value-of select="sum(for $ref in current-group() return $ref/../price)" />