我需要在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>