Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/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
Xml XSLT 1.0按日期分组_Xml_Xslt - Fatal编程技术网

Xml XSLT 1.0按日期分组

Xml XSLT 1.0按日期分组,xml,xslt,Xml,Xslt,我需要按日期对以下交易进行分组,并计算每个日期所有交易的总数和数量 输入: <transactions> <transaction id="1"> <element key="2" name="Amount">3.00</element> <element key="3" name="Date">01.01.2010</element> </transaction> <transacti

我需要按日期对以下交易进行分组,并计算每个日期所有交易的总数和数量

输入:

<transactions>
<transaction id="1">
    <element key="2" name="Amount">3.00</element>
    <element key="3" name="Date">01.01.2010</element>
</transaction>  
<transaction id="2">
    <element key="2" name="Amount">4.00</element>
    <element key="3" name="Date">01.01.2010</element>
</transaction>  
<transaction id="3">
    <element key="2" name="Amount">5.00</element>
    <element key="3" name="Date">01.01.2011</element>
</transaction>  
<transaction id="4">
    <element key="2" name="Amount">6.00</element>
    <element key="3" name="Date">01.01.2011</element>
</transaction>  
期望输出:

<transactions>
<date value="01.01.2010">
    <sum>7.00</sum>
    <numberOfTrans>2</numberOfTrans>
    <transaction id="1">
        <element key="2" name="Amount">3.00</element>
    </transaction>  
    <transaction id="2">
        <element key="2" name="Amount">4.00</element>
    </transaction>
</date>
<date value="01.01.2011">
    <sum>11.00</sum>
    <numberOfTrans>2</numberOfTrans>
    <transaction id="3">
        <element key="2" name="Amount">5.00</element>
    </transaction>  
    <transaction id="4">
        <element key="2" name="Amount">6.00</element>
    </transaction>
</date>
如何使用XSLT1.0实现这一点

谢谢

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="xml" indent="yes" />

   <xsl:key name="groups" match="/transactions/transaction" use="element[@name='Date']" />

   <xsl:template match="/transactions">
      <transactions>
         <xsl:apply-templates select="transaction[generate-id(.) = generate-id(key('groups', element[@name='Date'])[1])]" />
      </transactions>
   </xsl:template>

   <xsl:template match="transaction">
      <date id="{element[@name='Date']}">
         <sum>
            <xsl:value-of select="format-number(sum(key('groups', element[@name='Date'])/element[@name='Amount']), '#.00')" />
         </sum>
         <numberOfTrans>
            <xsl:value-of select="count(key('groups', element[@name='Date']))" />
         </numberOfTrans>
         <xsl:for-each select="key('groups', element[@name='Date'])">
            <xsl:copy>
               <xsl:copy-of select="@*" />
               <xsl:copy-of select="element[@name='Amount']" />
            </xsl:copy>
         </xsl:for-each>
      </date>
   </xsl:template>
</xsl:stylesheet>