2012-04-14 15 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> 

おかげで法案の合計数と合計金額が必要

答えて

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(NO xsl:for-each、ノー..、無text() useage):

<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()機能

関連する問題