按一组元素求和的XSLT



我需要在TXLifeRequest下添加一个额外的部分,用于从下面的xml中总结付款金额。

<?xml version="1.0" encoding="utf-8"?>
<TXLife xmlns="http://ACORD.org/Standards/Life/2">
    <TXLifeRequest>
        <FundCode>LTRT00</FundCode>
        <AccountDescription>CWA xxx</AccountDescription>
        <CurrencyTypeCode>840</CurrencyTypeCode>
        <TransExeDate>2013-04-20</TransExeDate>
        <AccountNumber>34142</AccountNumber>
        <PaymentAmt>300.000000000</PaymentAmt>
        <ReversalInd>0</ReversalInd>
    </TXLifeRequest>
    <TXLifeRequest>
        <FundCode>LTRW00</FundCode>
        <AccountDescription>CWA xxx</AccountDescription>
        <CurrencyTypeCode>840</CurrencyTypeCode>
        <TransExeDate>2013-04-20</TransExeDate>
        <AccountNumber>34142</AccountNumber>
        <PaymentAmt>300.000000000</PaymentAmt>
        <ReversalInd>0</ReversalInd>
    </TXLifeRequest>
    <TXLifeRequest>
        <FundCode>LTRW00</FundCode>
        <AccountDescription>CWA xxx</AccountDescription>
        <CurrencyTypeCode>840</CurrencyTypeCode>
        <TransExeDate>2013-04-20</TransExeDate>
        <AccountNumber>34142</AccountNumber>
        <PaymentAmt>300.000000000</PaymentAmt>
        <ReversalInd>0</ReversalInd>
    </TXLifeRequest>
    <TXLifeRequest>
        <FundCode>LUL500</FundCode>
        <AccountDescription>CWA xxx</AccountDescription>
        <CurrencyTypeCode>840</CurrencyTypeCode>
        <TransExeDate>2013-04-20</TransExeDate>
        <AccountNumber>34142</AccountNumber>
        <PaymentAmt>800.000000000</PaymentAmt>
        <ReversalInd>1</ReversalInd>
    </TXLifeRequest>
</TXLife>

PaymentAmt求和的标准是寻找组合TransExeDate , AccountNumber and ReversalInd。因此,基于这些标准,当我应用下面的xslt PaymentAmt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0" xmlns:ns="http://ACORD.org/Standards/Life/2">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:key name="detKey7s" match="//ns:TXLifeRequest"
        use="concat(generate-id(..), ns:TransExeDate, '+', ns:FundCode, '+', ns:ReversalInd)"/>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="/ns:TXLife">
        <xsl:element name="TXLife" namespace="http://ACORD.org/Standards/Life/2">
        <xsl:for-each select="ns:TXLifeRequest[generate-id() = generate-id(key('detKey7s',
            concat(generate-id(..), ns:TransExeDate, '+', ns:FundCode, '+', ns:ReversalInd)
            )
            )
            ]
            ">
            <xsl:copy>
                <xsl:variable name="vDataGroup" select=
                    "key('detKey7s', concat(generate-id(..),ns:TransExeDate, '+', ns:FundCode, '+', ns:ReversalInd))"/>                
                <xsl:apply-templates select="./*"></xsl:apply-templates>               
                <xsl:element name="TotalAmount" namespace="http://ACORD.org/Standards/Life/2">
                    <xsl:value-of select="sum($vDataGroup/ns:PaymentAmt)"/>
                </xsl:element>
            </xsl:copy>  
        </xsl:for-each>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

因此,应用上述xslt后,它将得到总结TXLifeRequest xml见<TotalAmount>600</TotalAmount>

<TXLife xmlns="http://ACORD.org/Standards/Life/2">
   <TXLifeRequest>
      <FundCode>LTRT00</FundCode>
      <AccountDescription>CWA – NB+U</AccountDescription>
      <CurrencyTypeCode>840</CurrencyTypeCode>
      <TransExeDate>2013-04-20</TransExeDate>
      <AccountNumber>34142</AccountNumber>
      <PaymentAmt>300.000000000</PaymentAmt>
      <ReversalInd>0</ReversalInd>
      <TotalAmount>300</TotalAmount>
   </TXLifeRequest>
   <TXLifeRequest>
      <FundCode>LTRW00</FundCode>
      <AccountDescription>CWA – NB+U</AccountDescription>
      <CurrencyTypeCode>840</CurrencyTypeCode>
      <TransExeDate>2013-04-20</TransExeDate>
      <AccountNumber>34142</AccountNumber>
      <PaymentAmt>300.000000000</PaymentAmt>
      <ReversalInd>0</ReversalInd>
      <TotalAmount>600</TotalAmount>
   </TXLifeRequest>
   <TXLifeRequest>
      <FundCode>LUL500</FundCode>
      <AccountDescription>CWA – NB+U</AccountDescription>
      <CurrencyTypeCode>840</CurrencyTypeCode>
      <TransExeDate>2013-04-20</TransExeDate>
      <AccountNumber>34142</AccountNumber>
      <PaymentAmt>800.000000000</PaymentAmt>
      <ReversalInd>1</ReversalInd>
      <TotalAmount>800</TotalAmount>
   </TXLifeRequest>
</TXLife>

现在的问题是我如何在summarup section下面添加一个额外的section?最后xml应该如下所示

<TXLifeRequest>
      <FundCode>LTRT00</FundCode>
      <AccountDescription>CWA – NB+U</AccountDescription>
      <CurrencyTypeCode>840</CurrencyTypeCode>
      <TransExeDate>2013-04-20</TransExeDate>
      <AccountNumber>34142</AccountNumber>
      <PaymentAmt>300.000000000</PaymentAmt>
      <ReversalInd>0</ReversalInd>
      <TotalAmount>300</TotalAmount>
   </TXLifeRequest>
   <TXLifeRequest>
      <FundCode>LTRW00</FundCode>
      <AccountDescription>CWA – NB+U</AccountDescription>
      <CurrencyTypeCode>840</CurrencyTypeCode>
      <TransExeDate>2013-04-20</TransExeDate>
      <AccountNumber>34142</AccountNumber>
      <PaymentAmt>300.000000000</PaymentAmt>
      <ReversalInd>0</ReversalInd>
      <TotalAmount>600</TotalAmount>
   </TXLifeRequest>
   <TXLifeRequest>
      <SummedUP>LTRW00</SummedUP>
   </TXLifeRequest>

   <TXLifeRequest>
      <FundCode>LUL500</FundCode>
      <AccountDescription>CWA – NB+U</AccountDescription>
      <CurrencyTypeCode>840</CurrencyTypeCode>
      <TransExeDate>2013-04-20</TransExeDate>
      <AccountNumber>34142</AccountNumber>
      <PaymentAmt>800.000000000</PaymentAmt>
      <ReversalInd>1</ReversalInd>
      <TotalAmount>800</TotalAmount>
   </TXLifeRequest>

我在上面提到的总结部分之后添加了一个部分。请让我知道我该如何进行。有什么想法吗??

谢谢,Madhu厘米

这只是对当前xsl:stylesheet:

的一个小改动
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0" xmlns:ns="http://ACORD.org/Standards/Life/2"
    xmlns="http://ACORD.org/Standards/Life/2">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:key name="detKey7s" match="//ns:TXLifeRequest"
        use="concat(generate-id(..), ns:TransExeDate, '+', ns:FundCode, '+', ns:ReversalInd)"/>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="/ns:TXLife">
        <xsl:element name="TXLife" namespace="http://ACORD.org/Standards/Life/2">
            <xsl:for-each select="ns:TXLifeRequest[generate-id() = generate-id(key('detKey7s',
            concat(generate-id(..), ns:TransExeDate, '+', ns:FundCode, '+', ns:ReversalInd)
            )
            )
            ]
            ">
                <xsl:variable name="vDataGroup" select=
                    "key('detKey7s', concat(generate-id(..),ns:TransExeDate, '+', ns:FundCode, '+', ns:ReversalInd))"/>
                <xsl:copy>
                    <xsl:apply-templates select="./*"></xsl:apply-templates>
                    <xsl:element name="TotalAmount" namespace="http://ACORD.org/Standards/Life/2">
                        <xsl:value-of select="sum($vDataGroup/ns:PaymentAmt)"/>
                    </xsl:element>
                </xsl:copy>
                <xsl:if test="count($vDataGroup) >1" >
                    <TXLifeRequest>
                        <SummedUP>
                            <xsl:value-of select=" ns:FundCode"/>
                        </SummedUP>
                    </TXLifeRequest>
                </xsl:if>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

将生成以下输出:

<TXLife xmlns="http://ACORD.org/Standards/Life/2">
  <TXLifeRequest>
    <FundCode>LTRT00</FundCode>
    <AccountDescription>CWA xxx</AccountDescription>
    <CurrencyTypeCode>840</CurrencyTypeCode>
    <TransExeDate>2013-04-20</TransExeDate>
    <AccountNumber>34142</AccountNumber>
    <PaymentAmt>300.000000000</PaymentAmt>
    <ReversalInd>0</ReversalInd>
    <TotalAmount>300</TotalAmount>
  </TXLifeRequest>
  <TXLifeRequest>
    <FundCode>LTRW00</FundCode>
    <AccountDescription>CWA xxx</AccountDescription>
    <CurrencyTypeCode>840</CurrencyTypeCode>
    <TransExeDate>2013-04-20</TransExeDate>
    <AccountNumber>34142</AccountNumber>
    <PaymentAmt>300.000000000</PaymentAmt>
    <ReversalInd>0</ReversalInd>
    <TotalAmount>600</TotalAmount>
  </TXLifeRequest>
  <TXLifeRequest>
    <SummedUP>LTRW00</SummedUP>
  </TXLifeRequest>
  <TXLifeRequest>
    <FundCode>LUL500</FundCode>
    <AccountDescription>CWA xxx</AccountDescription>
    <CurrencyTypeCode>840</CurrencyTypeCode>
    <TransExeDate>2013-04-20</TransExeDate>
    <AccountNumber>34142</AccountNumber>
    <PaymentAmt>800.000000000</PaymentAmt>
    <ReversalInd>1</ReversalInd>
    <TotalAmount>800</TotalAmount>
  </TXLifeRequest>
</TXLife>

相关内容

  • 没有找到相关文章

最新更新