2016-09-26 32 views
1

我试图使用for-each-group来总结值,但它似乎为每个组不返回所有元素。我试图根据PRIORYR,CYCLE和CODE的独特组合进行分组和求和。我目前的代码只是获取第一个TI_DET元素。下面是输入XML:xslt 2.0为每个组不返回所有元素

<TI_DET id="2"> 
    <PRIORYR>2014</PRIORYR> 
    <CYCLE>1</CYCLE> 
    <CODE>TAX</CODE> 
    <AMOUNT>44.35</AMOUNT> 
</TI_DET> 
<TI_DET id="3"> 
    <PRIORYR>2014</PRIORYR> 
    <CYCLE>1</CYCLE> 
    <CODE>TAX</CODE> 
    <AMOUNT>59.52</AMOUNT> 
</TI_DET> 
<TI_DET id="4"> 
    <PRIORYR>2014</PRIORYR> 
    <CYCLE>1</CYCLE> 
    <CODE>TAX</CODE> 
    <AMOUNT>20.77</AMOUNT> 
</TI_DET> 
<TI_DET id="5"> 
    <PRIORYR>2014</PRIORYR> 
    <CYCLE>1</CYCLE> 
    <CODE>TAX</CODE> 
    <AMOUNT>0.74</AMOUNT> 
</TI_DET> 
<TI_DET id="6"> 
    <PRIORYR>2014</PRIORYR> 
    <CYCLE>1</CYCLE> 
    <CODE>TAX</CODE> 
    <AMOUNT>1.48</AMOUNT> 
</TI_DET> 
<TI_DET id="7"> 
    <PRIORYR>2014</PRIORYR> 
    <CYCLE>1</CYCLE> 
    <CODE>TAX</CODE> 
    <AMOUNT>1.31</AMOUNT> 
</TI_DET> 

这里是我当前的代码:

<xsl:for-each-group select="/ns1:GetChargesResponse/PROPERTY/TI_DETS/TI_DET" group-by="PRIORYR"> 
     <xsl:sort select="PRIORYR" data-type="text" order="ascending"/> 
     <xsl:for-each-group select="current-group()" group-by="CYCLE"> 
      <xsl:sort select="CYCLE" data-type="text" order="ascending"/> 
      <xsl:for-each-group select="current-group()" group-by="CODE"> 
       <xsl:sort select="CODE" data-type="text" order="ascending"/> 
       <xsl:for-each-group select="current-group()" group-by="AUTH"> 
       <client:Charges> 
        <client:Description> 
        <xsl:value-of select="CODE"/> 
        </client:Description> 
        <client:TaxYear> 
        <xsl:value-of select="PRIORYR"/> 
        </client:TaxYear> 
        <client:Amount> 
        <xsl:value-of select="sum(AMOUNT)"/> 
        </client:Amount> 
        <client:Notes> 
        <xsl:value-of select="concat(PRIORYR,';',ROLLTYPE,';',CYCLE,';',CODE)"/> 
        </client:Notes> 
        <client:RedemptionCertificateNumber> 
        <xsl:value-of select="/ns1:GetChargesResponse/ns1:GetChargesResponse"/> 
        </client:RedemptionCertificateNumber> 
        <client:PayType> 
        <xsl:text disable-output-escaping="no">FUL</xsl:text> 
        </client:PayType> 
        <client:TaxCycle> 
        <xsl:value-of select="CYCLE"/> 
        </client:TaxCycle> 
        </client:Charges> 
        </xsl:for-each-group> 
      </xsl:for-each-group> 
     </xsl:for-each-group> 
    </xsl:for-each-group> 

的思考?

+0

一个有多个组的例子会更有用。 –

回答

0

首先,你有group-by="AUTH" - 但没有AUTH元素来分组。

另一个原因是,如果要总结当前组,您需要更改:

<xsl:value-of select="sum(AMOUNT)"/> 

到:

<xsl:value-of select="sum(current-group()/AMOUNT)"/> 

否则你将只得到的第一个项目的价值在当前组中。

+0

我认为可能就是这样。另外,我想将它配对以减少噪音。非常感激 –

相关问题