Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sum XSLT中的按ID分组和合计金额_Sum_Xslt 1.0_Grouping_Xslt Grouping - Fatal编程技术网

Sum XSLT中的按ID分组和合计金额

Sum XSLT中的按ID分组和合计金额,sum,xslt-1.0,grouping,xslt-grouping,Sum,Xslt 1.0,Grouping,Xslt Grouping,我对XSLT还相当陌生,并且一直停留在当前的问题上。我在Stackflow中做了一些搜索(似乎Muenchian方法是常见的分组方法),但我似乎还不能模仿一些发布的想法 因此,我使用一个行项目读取系统,我试图用XSLT编写代码来读取每一行,检查供应商ID是否相同,如果为真,它将把它聚合到一行,然后求和。如果不是真的,它应该用ID开始一个新行,并对金额求和,以此类推。我使用的是xml版本='1.0' 下面是我当前的XML数据文件: <data> <row> <

我对XSLT还相当陌生,并且一直停留在当前的问题上。我在Stackflow中做了一些搜索(似乎Muenchian方法是常见的分组方法),但我似乎还不能模仿一些发布的想法

因此,我使用一个行项目读取系统,我试图用XSLT编写代码来读取每一行,检查供应商ID是否相同,如果为真,它将把它聚合到一行,然后求和。如果不是真的,它应该用ID开始一个新行,并对金额求和,以此类推。我使用的是xml版本='1.0'

下面是我当前的XML数据文件:

<data>
<row>
    <column1>06-11111</column1>
    <column2>CP</column2>
    <column3>744.04</column3>
    <column4>CAD</column4>
</row>
<row>
    <column1>06-11111</column1>
    <column2>CP</column2>
    <column3>105.09</column3>
    <column4>CAD</column4>
</row>
<row>
    <column1>06-11111</column1>
    <column2>CP</column2>
    <column3>1366.24</column3>
    <column4>CAD</column4>
</row>
<row>
    <column1>06-11111</column1>
    <column2>CP</column2>
    <column3>485.71</column3>
    <column4>CAD</column4>
</row>
<row>
    <column1>06-11112</column1>
    <column2>Ever</column2>
    <column3>459.60</column3>
    <column4>CAD</column4>
</row>
<row>
    <column1>06-11112</column1>
    <column2>Ever</column2>
    <column3>409.14</column3>
    <column4>CAD</column4>
</row>
<row>
    <column1>06-11112</column1>
    <column2>Ever</column2>
    <column3>397.12</column3>
    <column4>CAD</column4>
</row>
<row>
    <column1>06-11113</column1>
    <column2>GE</column2>
    <column3>1425</column3>
    <column4>CAD</column4>
</row>
<row>
    <column1>06-11114</column1>
    <column2>Husky</column2>
    <column3>-215.14</column3>
    <column4>USD</column4>
</row>
<row>
    <column1>06-11114</column1>
    <column2>Husky</column2>
    <column3>2015</column3>
    <column4>USD</column4>
</row>
<row>
    <column1>06-11114</column1>
    <column2>Husky</column2>
    <column3>11195.34</column3>
    <column4>USD</column4>
</row>
</data>

06-11111
人物配对关系
744.04
计算机辅助设计
06-11111
人物配对关系
105.09
计算机辅助设计
06-11111
人物配对关系
1366.24
计算机辅助设计
06-11111
人物配对关系
485.71
计算机辅助设计
06-11112
曾经
459.60
计算机辅助设计
06-11112
曾经
409.14
计算机辅助设计
06-11112
曾经
397.12
计算机辅助设计
06-11113
通用电气
1425
计算机辅助设计
06-11114
深沉沙哑的
-215.14
美元
06-11114
深沉沙哑的
2015
美元
06-11114
深沉沙哑的
11195.34
美元
我希望在运行XSLT后获得的输出是

06-11111 | CP | 2701.08

06-11112 |曾经| 1265.86

06-11113 | GE | 1425

06-11114 |赫斯基| 12995.20


任何能让我开始的帮助都会很棒

以下是使用Muenchian方法的分组。我将让您根据小数点的数量来正确格式化数字。 我通常不使用它,因为它是有限的、棘手的,并且不适合推动编程。但是,它今天对你有用

<xsl:template match="@* | node()">
  <xsl:apply-templates select="@* | node()"/>
</xsl:template>

<xsl:key name="rows" match="row" use="concat(column1, '||', column2)" />

<xsl:template match="data">
  <xsl:for-each select="row[generate-id(.) = generate-id(key('rows', concat(column1, '||', column2))[1])]">
    <xsl:sort select="column1" data-type="text" order="ascending"/>
    <xsl:sort select="column2" data-type="text" order="ascending"/>

    <xsl:value-of select="concat(column1,'|',column2,'|')"/>

    <xsl:variable name="mySum">
      <xsl:value-of select="sum(key('rows', concat(column1, '||', column2))/column3)"/>
    </xsl:variable>

    <xsl:value-of select="format-number($mySum,'#,##0.00')"/>

    <xsl:value-of select="'&#xD;&#xA;'"/>
  </xsl:for-each>
</xsl:template>


如果您的输入是XML,请将其显示为XML。对于XSLT1.0中的分组,从这里开始:感谢您的回复michael.hor257k!编辑我的问题以提供XML格式。答案在我前面引用的文章中。在这里发布的许多明钦族分组的例子中。谢谢@Bluewood66的帮助!非常感谢。