2016-09-26 3 views
1

for-each-groupを使用して値を要約しようとしていますが、for-each-groupがすべての要素を返さないようです。私はPRIORYR、CYCLE、CODEのユニークな組み合わせに基づいてグループ化して合計しようとしています。私の現在のコードは最初のTI_DET要素だけを取得しています。ここで入力されたXMLは次のとおりです。xslt 2.0 for-each-groupがすべての要素を返さない

<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

それはそれかもしれないと思います。また、ノイズを減らすためにそれをペアにしたいと思っていました。とても有難い –

関連する問題