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>

上記の要約セクションの直後にセクションを追加することに感銘を受けました。どうすればよいか教えてください。何か案は ??

ありがとう、マドゥCM

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 に答える