2013-01-07 52 views
0

如何計算在下面的xml中使用empid和date進行分組後,小時節點的前3次出現總和,並將總和存儲在變量中。分組後計算使用xslt的前3次節點發生的總和1.0

<Records> 
    <Line> 
     <EmpId>1</EmpId> 
     <Date>10/01/2012</Date> 
     <Hour>4</Hour> 
    </Line> 
    <Line> 
     <EmpId>1</EmpId> 
     <Date>10/01/2012</Date> 
     <Hour>4</Hour> 
    </Line> 
    <Line> 
     <EmpId>1</EmpId> 
     <Date>10/02/2012</Date> 
     <Hour>8</Hour> 
    </Line> 
    <Line> 
     <EmpId>1</EmpId> 
     <Date>10/03/2012</Date> 
     <Hour>8</Hour> 
    </Line> 
    <Line> 
     <EmpId>1</EmpId> 
     <Date>10/04/2012</Date> 
     <Hour>8</Hour> 
    </Line> 
    </Records> 

所以變量的值應該是24

+0

請添加更多的解釋。目前還不清楚爲什麼預期的結果必須是24分。我認爲分組後的前三個「小時」元素的總和是16. –

+0

我使它成爲20;據我所知,前兩個應該分組。但是,如果'小時'元素在分組時相加,那麼它將是24。 – Flynn1179

回答

1

如果我看了你的要求正確,我想這應該做的工作:

<xsl:key name="countHours" match="Line" use="concat(EmpId,'-',Date)" /> 

<xsl:template match="/"> 
    <xsl:value-of select="sum(
    Records/Line[ 
     count(
     preceding-sibling::*[ 
      generate-id()=generate-id(key('countHours',concat(EmpId,'-',Date))[1]) 
     ] 
    ) &lt; 3 
    ]/Hour 
)" /> 
</xsl:template>