0
 <fo:block start-indent="5mm">  
    <xsl:for-each select="//policyResult[not(AgentNumber=preceding-sibling::policyResult/AgentNumber)]" >    
    <xsl:variable name="agentNum"><xsl:value-of select="AgentNumber"></xsl:value-of>  
    </xsl:variable>                 
    <xsl:for-each select="//policyResult[AgentNumber=$agentNum]">    
<xsl:sort select="agentnumber"/>
<xsl:sort select="policynumber"/>
    <fo:table border-style="" width="100%" border-spacing="4">                          
    <fo:table-body>    
    <fo:table-row border-before-style="solid">   
    <fo:table-cell>   
    <fo:block>
           <fo:inline>Pol Number</fo:inline><xsl:value-of select="PolicyNumber"/>    
    </fo:block>    
    </fo:table-cell>        
    </fo:table-body>    
    </fo:table> 

繰り返されるノードをフィルタリングするために、このようなコードを書きました。ここで私の問題は、これを昇順でソートする必要があることです.xmlは次のようになります

    <policyResult xmlns="" xmlns:ns2="http://ws.faithlife.com/resonant">
                                   <producttype>risk</producttype>                            <PolicyNumber>003050669</PolicyNumber>    
                    <AgentNumber>005262</AgentNumber>
                    <AnnualPremium>12000.0</AnnualPremium>                  
    </policyResult>
    <policyResult xmlns="" xmlns:ns2="http://ws.faithlife.com/resonant">
<producttype>wealth</producttype>                   
<PolicyNumber>003050669</PolicyNumber>
                    <AgentNumber>005282</AgentNumber>
                    <AnnualPremium>12000.0</AnnualPremium>                  
    </policyResult>

    <policyResult xmlns="" xmlns:ns2="http://ws.faithlife.com/resonant">
<producttype>risk</producttype>
                    <PolicyNumber>003050670</PolicyNumber>
                    <AgentNumber>005262</AgentNumber>
                    <AnnualPremium>12000.0</AnnualPremium>      

    </policyResult>
    <policyResult xmlns="" xmlns:ns2="http://ws.faithlife.com/resonant">
<producttype>wealth</producttype>
                    <PolicyNumber>003050671</PolicyNumber>
                    <AgentNumber>005263</AgentNumber>
                    <AnnualPremium>12000.0</AnnualPremium>                      
    </policyResult>
    <policyResult xmlns="" xmlns:ns2="http://ws.faithlife.com/resonant">
<producttype>wealth</producttype>
                    <PolicyNumber>003050668</PolicyNumber>
                    <AgentNumber>005265</AgentNumber>
                    <AnnualPremium>12000.0</AnnualPremium>                  
    </policyResult>
    <policyResult xmlns="" xmlns:ns2="http://ws.faithlife.com/resonant">
<producttype>wealth</producttype>
                    <PolicyNumber>003050668</PolicyNumber>
                    <AgentNumber>005265</AgentNumber>
                    <AnnualPremium>12000.0</AnnualPremium>                  
    </policyResult>

私がしなければならないことは、AgentNumber、AnnualPremium を昇順でフィルタリングすることです。そして、各エージェントの Annualpremium とすべての Annualpremium の合計を合計する必要があります。

出力はこのようにする必要があります。エージェント番号が繰り返される場合は、昇順で一度だけ表示する必要があります

製品タイプのリスク

エージェント番号 005266

証券番号 003050669 年会費 12000

証券番号 003050671 年会費 12000

年間保険料合計 -- このエージェントの保険料の合計、つまり 24000

エージェント番号 005267

証券番号 0001234 年会費 11000

policynumber 0001235 年間保険料 11000 合計年間保険料 -- このエージェントの保険料の合計、つまり 22000

製品タイプの富

エージェント番号 005266

証券番号 003050669 年会費 12000

証券番号 003050671 年会費 12000

年間保険料合計 -- このエージェントの保険料の合計、つまり 24000

エージェント番号 005267

証券番号 0001234 年会費 11000

policynumber 0001235 年間保険料 11000 合計年間保険料 -- このエージェントの保険料の合計、つまり 22000

最後に、すべてのエージェントの全体的な年間保険料を表示する必要があります

総保険料---24000+22000=46000

私を助けてください..事前に感謝します

この種の出力が必要です..

4

1 に答える 1

1

この答えは、パスの問題としてではなく、グループ化の問題としてアプローチする必要があります。

あなたの「期待される結果」が入力に対応していないことに気付きました。そのため、期待される結果に一致するように入力を変更しました。

次の解決策を検討してください。これを XSLT 1.0 としてタグ付けした場合、Muenchen 方式のグループ化を使用する必要があります。

t:\ftemp>type policies.xml
<?xml version="1.0" encoding="UTF-8"?>
<policies>
<policyResult xmlns="" xmlns:ns2="http://ws.faithlife.com/resonant">
                <PolicyNumber>003050669</PolicyNumber>
                <AgentNumber>005266</AgentNumber>
                <AnnualPremium>12000.0</AnnualPremium>
</policyResult>
<policyResult xmlns="" xmlns:ns2="http://ws.faithlife.com/resonant">
                <PolicyNumber>0001235</PolicyNumber>
                <AgentNumber>005267</AgentNumber>
                <AnnualPremium>11000.0</AnnualPremium>
</policyResult>
<policyResult xmlns="" xmlns:ns2="http://ws.faithlife.com/resonant">
                <PolicyNumber>0001234</PolicyNumber>
                <AgentNumber>005267</AgentNumber>
                <AnnualPremium>11000.0</AnnualPremium>
</policyResult>
<policyResult xmlns="" xmlns:ns2="http://ws.faithlife.com/resonant">
                <PolicyNumber>003050671</PolicyNumber>
                <AgentNumber>005266</AgentNumber>
                <AnnualPremium>12000.0</AnnualPremium>
</policyResult>
</policies>
t:\ftemp>xslt policies.xml policies.xsl

Agent Number: 005266
Policy Number: 003050669 Premium: 12000.0
Policy Number: 003050671 Premium: 12000.0
Total for agent: 24000
Agent Number: 005267
Policy Number: 0001234 Premium: 11000.0
Policy Number: 0001235 Premium: 11000.0
Total for agent: 22000
Total for all: 46000
t:\ftemp>type policies.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

<xsl:output method="text"/>

<!--establish the key for the grouping-->
<xsl:key name="agent" match="policyResult" use="AgentNumber"/>

<xsl:template match="policies">
  <!--perform the grouping per agent-->
  <xsl:for-each
    select="policyResult[generate-id(.)=
                         generate-id(key('agent',AgentNumber)[1])]">
    <!--sort the groups by AgentNumber-->
    <xsl:sort select="AgentNumber"/>
Agent Number: <xsl:value-of select="AgentNumber"/>
    <!--revisit policies for agent-->
    <xsl:for-each select="key('agent',AgentNumber)">
      <!--sort groups by policy number-->
      <xsl:sort select="PolicyNumber"/>
Policy Number: <xsl:value-of select="PolicyNumber"/> Premium: <xsl:value-of
                             select="AnnualPremium"/>
    </xsl:for-each>
Total for agent: <xsl:value-of
                      select="sum(key('agent',AgentNumber)/AnnualPremium)"/>
  </xsl:for-each>
Total for all: <xsl:value-of select="sum(policyResult/AnnualPremium)"/>
</xsl:template>

</xsl:stylesheet>
t:\ftemp>

XSL-FO はあなたに任せます。

于 2013-06-20T23:42:54.040 に答える