2011-07-23 159 views
2

這是我的XML:XSLT總的和小計

<Forms> 
    <Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" /> 
    <Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" /> 
    <Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" LDATE="Jul" /> 
    <Form PRONME="Air Prospect Name" PPRONME="0" NACRES="1" /> 
    <Form PRONME="Air Prospect Name" PPRONME="0" TBONUSP="1000" NACRES="1" /> 
    <Total PRONME="Air Prospect 2" PPRONME="0" TBONUSP="3000" NACRES="6" /> 
    <Total PRONME="Air Prospect Name" PPRONME="0" NACRES="2" TBONUSP="1000" /> 
</Forms> 

我想以後打印窗體元素爲一組我想打印該組的總,例如:

<Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" /> 
<Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" /> 
<Form PRONME="Air Prospect 2" PPRONME="0" TBONUSP="1000" NACRES="2" LDATE="Jul" /> 

閱讀本組後,我想基於PRONME打印

<Total PRONME="Air Prospect 2" PPRONME="0" TBONUSP="3000" NACRES="6" /> 

我想集團... 使用XSLT 1.0

+0

你用什麼XSLT版本? –

+0

我試圖清理你的問題 - 請驗證。如果你定義了什麼使得一個「組」(目前我猜* PRONME屬性的值),這將有所幫助。 – Richard

+0

基於PRONME我想集團...使用XSLT 1.0 ..請幫助我如何做到這一點.. – Rocky111

回答

3

以HTML格式顯示,你可以使用這個模板:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:key name="k" match="Form" use="@PRONME"/> 

    <xsl:template match="/"> 
    <html> 
     <head> 
     <style type="text/css">td,th{border:1px solid black}</style> 
     </head> 
     <table style="border:solid 1px black;border-collapse:collapse"> 
     <tr> 
      <th>PRONME</th> 
      <th>PPRONME</th> 
      <th>TBONUSP</th> 
      <th>NACRES</th> 
     </tr> 
     <xsl:apply-templates select="*/Form[generate-id(.) = generate-id(key('k', @PRONME))]"/> 
     </table> 
    </html> 
    </xsl:template> 

    <xsl:template match="Form"> 
    <tr> 
     <td> 
     <xsl:value-of select="@PRONME"/> 
     </td> 
     <td> 
     <xsl:value-of select="@PPRONME"/> 
     </td> 
     <td> 
     <xsl:value-of select="sum(//Form[@PRONME = current()/@PRONME]/@TBONUSP)"/> 
     </td> 
     <td> 
     <xsl:value-of select="sum(//Form[@PRONME = current()/@PRONME]/@NACRES)"/> 
     </td> 
    </tr> 

    </xsl:template> 

</xsl:stylesheet> 

輸出:

enter image description here

XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <html> 
     <head> 
     <style type="text/css">td,th{border:1px solid black}</style> 
     </head> 
     <table style="border:solid 1px black;border-collapse:collapse"> 
     <tr> 
      <th>PRONME</th> 
      <th>PPRONME</th> 
      <th>TBONUSP</th> 
      <th>NACRES</th> 
     </tr> 
     <xsl:apply-templates select="*/Total"/> 
     </table> 
    </html> 
    </xsl:template> 

    <xsl:template match="Total"> 
    <xsl:apply-templates select="//Form[@PRONME = current()/@PRONME]"/> 

    <tr style="color:red"> 
     <td> 
     <xsl:value-of select="@PRONME"/> 
     </td> 
     <td> 
     <xsl:value-of select="@PPRONME"/> 
     </td> 
     <td> 
     <xsl:value-of select="@TBONUSP"/> 
     </td> 
     <td> 
     <xsl:value-of select="@NACRES"/> 
     </td> 
    </tr> 
    </xsl:template> 


    <xsl:template match="Form"> 

     <tr> 
     <td> 
      <xsl:value-of select="@PRONME"/> 
     </td> 
     <td> 
      <xsl:value-of select="@PPRONME"/> 
     </td> 
     <td> 
      <xsl:value-of select="@TBONUSP"/> 
     </td> 
     <td> 
      <xsl:value-of select="@NACRES"/> 
     </td> 
     </tr> 

    </xsl:template> 

</xsl:stylesheet> 

結果:

enter image description here

+0

以上是我的代碼,但是我的inputxml已經在開始時更改爲給定格式,所以我需要幫助來閱讀不同的標籤元素.... – Rocky111

+0

@ Rocky111,更新您的問題,不是我的答案。 –

+0

@ Rocky111,我更新了我的答案。 –

2

您可以使用此XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:key name="k" match="Form" use="@PRONME"/> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="*/Form[generate-id(.) = generate-id(key('k', @PRONME))]"/> 
    </xsl:template> 

    <xsl:template match="Form"> 
    <Total PRONME="{@PRONME}" PPRONME="{@PPRONME}" 
      TBONUSP="{sum(//Form[@PRONME = current()/@PRONME]/@TBONUSP)}" 
      NACRES="{sum(//Form[@PRONME = current()/@PRONME]/@NACRES)}"/> 
    </xsl:template> 

</xsl:stylesheet> 

輸出:

<Total PRONME="Air Prospect 2" PPRONME="0" TBONUSP="3000" NACRES="6" /> 
<Total PRONME="Air Prospect Name" PPRONME="0" TBONUSP="1000" NACRES="2" /> 
+0

感謝兄弟快速回復..你可以請告訴我爲什麼我得到空白屏幕... – Rocky111

+0

@ Rocky111 , 你什麼意思? –

+0

我試着在「XML記事本」中輸入你的代碼..但是我沒有得到任何輸出..需要改變任何東西......?我如何檢查,否則...我很新,這可以幫助我.. – Rocky111