2013-06-23 5 views
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> 

Я написал такой код, чтобы отфильтровать повторяющиеся узлы. здесь моя проблема в том, что я должен разобраться в этом в возрастающем Order.The 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 в восходящем order.and необходимо просуммировать Annualpremium каждого агента и сумма всех годовых.

Из-за этого должен быть такой. если агент число повторов, мы должны показать его только один раз в порядке возрастания

тип продукта: риск

номер агента 005266

policynumber 003050669 ежегодного Дня премии 12000

policynumber 003050671 ежегодного Дня премия 12000

общая годовая премия --сумма премии этого агента, т.е. 240 00

агент номер 005267

policynumber 00 премии ежегодного Дня 11000

policynumber 00 премии ежегодного Дня 11000 общая годовая премия --sum премии этого агента т.е. типа 22000

продукта: богатство

номер агента 005266

policynumber 003050669 12000 премии ежегодного Дня

policynumber 003050671 12000 премии ежегодного Дня

общий годовой премии --sum премии этого агента т.е. 24000

номер агента 005267

policynumber 00 ежегодного Дня премия 11000

полицейский номер 00 премии ежегодного Дня 11000 общая годовая премия --sum премии этого агента т.е. 22000

в конце концов, мы должны показать общую ежегодную премию всех агентов

Общий объем премий --- 24000 + 22000 = 46000

пожалуйста, помогите мне out..thanks заранее

нужен этот вид продукции ..

ответ

0

Опять же, ваш входные данные не соответствуют вашим ожидаемым результатам.Сегодня у меня нет времени для исправления входных данных, но я написал преобразование, которое будет работать с исправленными данными. Я запустил его с данными, которые вы мне дали.

В вашем новом требовании XSLT 1.0 для вложенной группировки я считаю, что метод группировки на основе переменных является самым простым.

<?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"/> 

<xsl:template match="policies"> 
    <xsl:variable name="types" select="policyResult"/> 
    <xsl:for-each select="$types"> 
    <xsl:sort select="producttype"/> 
    <xsl:if test="generate-id(.)= 
        generate-id($types[producttype=current()/producttype][1])"> 
Product type: <xsl:value-of select="producttype"/> 
     <xsl:variable name="agents" 
        select="$types[producttype=current()/producttype]"/> 
     <xsl:for-each select="$agents"> 
     <xsl:sort select="AgentNumber"/> 
     <xsl:if test="generate-id(.)= 
        generate-id($agents[AgentNumber=current()/AgentNumber][1])"> 
Agent number: <xsl:value-of select="AgentNumber"/> 
      <xsl:for-each select="$agents[AgentNumber=current()/AgentNumber]"> 
Policy number: <xsl:value-of select="PolicyNumber"/> Premium: <xsl:value-of 
          select="AnnualPremium"/> 
      </xsl:for-each> 
Agent premium total: <xsl:value-of 
     select="sum($agents[AgentNumber=current()/AgentNumber]/AnnualPremium)"/> 
     </xsl:if> 
     </xsl:for-each> 
    </xsl:if> 
    </xsl:for-each> 
Premium total: <xsl:value-of select="sum(policyResult/AnnualPremium)"/> 
</xsl:template> 

</xsl:stylesheet> 

Когда таблица стилей применяется к следующему XML:

<?xml version="1.0" encoding="UTF-8"?> 
<policies> 
    <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> 
</policies> 

Он производит следующий вывод:

Product type: risk 
Agent number: 005262 
Policy number: 003050669 Premium: 12000.0 
Policy number: 003050670 Premium: 12000.0 
Agent premium total: 24000 
Product type: wealth 
Agent number: 005263 
Policy number: 003050671 Premium: 12000.0 
Agent premium total: 12000 
Agent number: 005265 
Policy number: 003050668 Premium: 12000.0 
Policy number: 003050668 Premium: 12000.0 
Agent premium total: 24000 
Agent number: 005282 
Policy number: 003050669 Premium: 12000.0 
Agent premium total: 12000 
Premium total: 72000