2012-04-14 44 views
1
<customer> 
    <item> 
    <BILLNO>1</BILLNO> 
    <product>ABC</product> 
    <AMT>20</AMT> 
    </item> 
    <item> 
    <BILLNO>2</BILLNO> 
    <product>GHK</product> 
    <AMT>30</AMT> 
    </item> 
    <item> 
    <BILLNO>1</BILLNO> 
    <product>XYZ</product> 
    <AMT>20</AMT> 
    </item> 
</customer> 

我正在嘗試使用xslt1.0獲取不同值的總和。 我想使用muenchian method.each這樣的輸出這樣的賬單將有多個產品。在一天結束時,我需要票據的總數量和總金額xslt1.0中不同值的總和

<sales> 
    <totalbills>2</totalbills> 
    <totalamount>50</totalamount> 
</sales> 

感謝您的幫助 RAM

回答

0

這XSLT樣式表:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:key name="item-key" match="item" use="BILLNO/text()"/> 

    <xsl:template match="/customer"> 
    <root> 
     <xsl:for-each select="item[generate-id() = generate-id(key('item-key', BILLNO/text()))]"> 
     <sales> 
      <totalbills> 
      <xsl:value-of select="count(../item[BILLNO = current()/BILLNO])"/> 
      </totalbills> 
      <totalamount> 
      <xsl:value-of select="sum(../item[BILLNO = current()/BILLNO]/AMT)"/> 
      </totalamount> 
     </sales> 
     </xsl:for-each> 
    </root> 
    </xsl:template> 
</xsl:stylesheet> 

呈現以下ouptut:

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <sales> 
    <totalbills>2</totalbills> 
    <totalamount>40</totalamount> 
    </sales> 
    <sales> 
    <totalbills>1</totalbills> 
    <totalamount>30</totalamount> 
    </sales> 
</root> 
0

這個簡單而簡單的轉換mation(無xsl:for-each,沒有..,沒有text()使用率):

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

<xsl:key name="kBills" match="item" use="BILLNO"/> 

<xsl:variable name="vdistItems" select= 
    "/*/*[generate-id() = generate-id(key('kBills', BILLNO)[1])]"/> 

<xsl:template match="/*"> 
    <sales> 
     <totalbills><xsl:value-of select="count($vdistItems)"/></totalbills> 
     <totalamount><xsl:value-of select="sum($vdistItems/AMT)"/></totalamount> 
    </sales> 
</xsl:template> 
</xsl:stylesheet> 

當所提供的XML文檔應用:

<customer> 
    <item> 
    <BILLNO>1</BILLNO> 
    <product>ABC</product> 
    <AMT>20</AMT> 
    </item> 
    <item> 
    <BILLNO>2</BILLNO> 
    <product>GHK</product> 
    <AMT>30</AMT> 
    </item> 
    <item> 
    <BILLNO>1</BILLNO> 
    <product>XYZ</product> 
    <AMT>20</AMT> 
    </item> 
</customer> 

產生完全相同想要的,正確的結果:

<sales> 
    <totalbills>2</totalbills> 
    <totalamount>50</totalamount> 
</sales> 

說明:適當利用

  1. Muenchian method for grouping

  2. sum()函數