1

我需要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 之后,我将总结TXLifeRequestxml 参见 <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>

现在的问题是我如何在总结部分下添加一个额外的部分?所以最后 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>

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

谢谢,马杜厘米

4

1 回答 1

1

这只是对当前 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>
于 2013-05-13T14:20:45.397 回答