2012-04-14 54 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()函数