2015-11-30 34 views
0

能否請您提供xslt代碼,以瞭解如何根據以下 xml得出結果的分組數據。預期結果應該是:如何根據XSLT中的關鍵值對hrs進行分組和總和

Year Week Tot Hrs Ben Hrs 
2015 33 80.7  0 
2015 34 120.7  0 

提前感謝您的幫助

XML:

<?xml version="1.0" encoding="UTF-8"?> 
    -<wd:Report_Data xmlns:wd="urn:com.workday.report/TLB024_TEST"> 
-<wd:Report_Entry> 
    -<wd:PAYROLL_RESULT_LINE> 
    <wd:FISCAL_YEAR>2015</wd:FISCAL_YEAR> 
    <wd:FISCAL_WEEK>33</wd:FISCAL_WEEK> 
    <wd:TOT_HRS>40</wd:TOT_HRS> 
    <wd:BEN_HRS>0</wd:BEN_HRS> 
    </wd:PAYROLL_RESULT_LINE> 
-<wd:PAYROLL_RESULT_LINE> 
    <wd:FISCAL_YEAR>2015</wd:FISCAL_YEAR> 
    <wd:FISCAL_WEEK>33</wd:FISCAL_WEEK> 
    <wd:TOT_HRS>0.07</wd:TOT_HRS> 
    <wd:BEN_HRS>0</wd:BEN_HRS> 
    </wd:PAYROLL_RESULT_LINE> 
    -<wd:PAYROLL_RESULT_LINE> 
    <wd:FISCAL_YEAR>2015</wd:FISCAL_YEAR> 
    <wd:FISCAL_WEEK>34</wd:FISCAL_WEEK> 
    <wd:TOT_HRS>40</wd:TOT_HRS> 
    <wd:BEN_HRS>0</wd:BEN_HRS> 
    </wd:PAYROLL_RESULT_LINE> 
    -<wd:PAYROLL_RESULT_LINE> 
    <wd:FISCAL_YEAR>2015</wd:FISCAL_YEAR> 
    <wd:FISCAL_WEEK>34</wd:FISCAL_WEEK> 
    <wd:TOT_HRS>0.07</wd:TOT_HRS> 
    <wd:BEN_HRS>0</wd:BEN_HRS> 
    </wd:PAYROLL_RESULT_LINE> 
    </wd:Report_Entry> 
-<wd:Report_Entry> 
    -<wd:PAYROLL_RESULT_LINE> 
    <wd:FISCAL_YEAR>2015</wd:FISCAL_YEAR> 
    <wd:FISCAL_WEEK>33</wd:FISCAL_WEEK> 
    <wd:TOT_HRS>40</wd:TOT_HRS> 
    <wd:BEN_HRS>0</wd:BEN_HRS> 
    </wd:PAYROLL_RESULT_LINE> 
    -<wd:PAYROLL_RESULT_LINE> 
    <wd:FISCAL_YEAR>2015</wd:FISCAL_YEAR> 
    <wd:FISCAL_WEEK>34</wd:FISCAL_WEEK> 
    <wd:TOT_HRS>40</wd:TOT_HRS> 
    <wd:BEN_HRS>0</wd:BEN_HRS> 
    </wd:PAYROLL_RESULT_LINE> 
    </wd:Report_Entry> 
    -<wd:Report_Entry> 
</wd:Report_Data> 

XSLT:

這是XSLT代碼,我試過不能夠得到慾望結果。

<?xml version='1.0'?> 
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:wd="urn:com.workday.report/TLB024_TEST" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

    <xsl:template match="/|*"> 
     <xsl:copy> 
      <xsl:apply-templates select="*" /> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="wd:Report_Entry"> 

    <File xmlns:xtt="urn:com.workday/xtt"> 
     <xsl:for-each select="wd:PAYROLL_RESULT_LINE"> 
      <Record> 
       <xsl:variable name="Group" select="../wd:PAYROLL_RESULT_LINE[((wd:FISCAL_YEAR=current()/wd:FISCAL_YEAR) and (wd:FISCAL_WEEK=current()/wd:FISCAL_WEEK)]" /> 
       <xsl:if test="generate-id()=generate-id($Group[1])"> 
       <xsl:copy> 
        <fiscal_year xtt:align="left"><xsl:value-of select="wd:FISCAL_YEAR"/></fiscal_year> 
        <fiscal_week xtt:align="left"><xsl:value-of select="wd:FISCAL_WEEK"/></fiscal_week> 
        <tot_hrs xtt:fixedLength="7" xtt:align="left"><xsl:value-of select="format-number(sum($Group/wd:TOT_HRS), '0.##')"/></tot_hrs> 
        <ben_hrs xtt:fixedLength="7" xtt:align="left"><xsl:value-of select="format-number(sum($Group/wd:BEN_HRS), '0.##')"/></ben_hrs> 
        <Filler><xsl:text>&#xa;</xsl:text></Filler> 
       </xsl:copy> 
       </xsl:if> 
      </Record> 
     </xsl:for-each> 
    </File> 

    </xsl:template> 
</xsl:stylesheet> 
+0

你應該指出問的答案之前,你是怎麼試試... – AlphaB

+0

我試着用這個代碼..不能夠得到理想的結果 – Sabari

+0

你忘了告訴我們想要的結果... –

回答

0

如果使用XSLT 2.0,這是一個很簡單的分組問題:

<xsl:for-each-group select="wd:PAYROLL_RESULT_LINE" 
    group-by="concat(wd:FISCAL_YEAR, '/', wd:FISCAL_WEEK)"> 
      <Record> 
        <fiscal_year xtt:align="left"><xsl:value-of select="wd:FISCAL_YEAR"/></fiscal_year> 
        <fiscal_week xtt:align="left"><xsl:value-of select="wd:FISCAL_WEEK"/></fiscal_week> 
        <tot_hrs xtt:fixedLength="7" xtt:align="left"><xsl:value-of select="format-number(sum(current-group()/wd:TOT_HRS), '0.##')"/></tot_hrs> 
        <ben_hrs xtt:fixedLength="7" xtt:align="left"><xsl:value-of select="format-number(sum(current-group()/wd:BEN_HRS), '0.##')"/></ben_hrs> 
        <Filler><xsl:text>&#xa;</xsl:text></Filler> 
      </Record> 
</xsl:for-each-group> 
相關問題