2013-10-08 2 views
1

다음 트랜잭션을 날짜별로 그룹화하고 각 날짜의 모든 트랜잭션의 합계와 수를 계산해야합니다.XSLT 1.0 (날짜 별)

입력 :

<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> 

원하는 출력 : 그는 XSLT 1.0을 사용하는 방법을

<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> 

을 할 수 있는가?

감사합니다.

답변

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>