Altova Mailing List Archives>Archive Index >microsoft.public.xsl Archive Home >Recent entries >Thread Prev - Grouping problem... [Thread Next] Re: Grouping problem...To: NULL Date: 7/6/2006 4:18:00 AM
I've manged to solve my problem using Axies :]
it's based on great article about grouping ( Muenchian Method) avalible
at:
http://www.codeproject.com/soap/groupxml.asp
workig xslt is:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="RodzajStawki" match="Line"
use="Line-Item/TaxCategoryCode"
xmlns:ns0="http://Wyborowa.EDI.Schemas.Invoice"/>
<xsl:key name="Stawka" match="Line" use="Line-Item/TaxRate"
xmlns:ns0="http://Wyborowa.EDI.Schemas.Invoice"/>
<xsl:key name="RodzajStawkiNOTS" match="Line" use="Line-Item/TaxRate"
xmlns:ns0="http://Wyborowa.EDI.Schemas.Invoice"/>
<xsl:key name="StawkaNOTS" match="Line"
use="Line-Item/TaxCategoryCode"
xmlns:ns0="http://Wyborowa.EDI.Schemas.Invoice"/>
<xsl:template match="/">
<xsl:element name="Tax-Summary">
<xsl:for-each select="//Line[generate-id(.) =
generate-id(key('RodzajStawki', Line-Item/TaxCategoryCode)[1])]">
<xsl:variable name="lngRodzajStawki">
<xsl:value-of select="Line-Item/TaxCategoryCode" />
</xsl:variable>
<xsl:variable name="lstRodzajStawki"
select="//Line[Line-Item/TaxCategoryCode=$lngRodzajStawki]" />
<xsl:call-template name="PokazStawki">
<xsl:with-param name="lstRodzajStawki" select="$lstRodzajStawki"
/>
</xsl:call-template>
</xsl:for-each>
<xsl:for-each select="//Line[generate-id(.) =
generate-id(key('RodzajStawkiNOTS', Line-Item/TaxRate)[1])]">
<xsl:variable name="lngRodzajStawkiNOTS">
<xsl:value-of select="Line-Item/TaxRate" />
</xsl:variable>
<xsl:variable name="lstRodzajStawkiNOTS"
select="//Line[Line-Item/TaxRate=$lngRodzajStawkiNOTS]" />
<xsl:call-template name="PokazStawkiNOTS">
<xsl:with-param name="lstRodzajStawkiNOTS"
select="$lstRodzajStawkiNOTS" />
</xsl:call-template>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template name="PokazStawki">
<xsl:param name="lstRodzajStawki" />
<xsl:if test="$lstRodzajStawki[1]/Line-Item/TaxCategoryCode='S'">
<xsl:for-each select="$lstRodzajStawki[generate-id(.) =
generate-id(key('Stawka', Line-Item/TaxRate)[1])]">
<xsl:variable name="lngStawka" select="Line-Item/TaxRate"/>
<xsl:variable name="lstStawka"
select="//Line[Line-Item/TaxRate=$lngStawka]" />
<xsl:element name="Tax-Summary-Line">
<xsl:element name="TaxRate">
<xsl:value-of select="$lstStawka/Line-Item/TaxRate"/>
</xsl:element>
<xsl:element name="TaxCategoryCode">
<xsl:value-of select="$lstStawka/Line-Item/TaxCategoryCode"/>
</xsl:element>
<xsl:element name="TaxAmount">
<xsl:value-of select="sum($lstStawka/Line-Item/TaxAmount)"/>
</xsl:element>
<xsl:element name="TaxableAmount">
<xsl:value-of select="sum($lstStawka/Line-Item/NetAmount)"/>
</xsl:element>
<xsl:element name="GrossAmount">
<xsl:value-of
select="(sum($lstStawka/Line-Item/TaxAmount))+(sum($lstStawka/Line-Item/NetAmount))"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:if>
</xsl:template>
<xsl:template name="PokazStawkiNOTS">
<xsl:param name="lstRodzajStawkiNOTS" />
<xsl:if
test="$lstRodzajStawkiNOTS[1]/Line-Item/TaxCategoryCode!='S'">
<xsl:for-each select="$lstRodzajStawkiNOTS[generate-id(.) =
generate-id(key('StawkaNOTS', Line-Item/TaxCategoryCode)[1])]">
<xsl:variable name="lngStawkaNOTS"
select="Line-Item/TaxCategoryCode"/>
<xsl:variable name="lstStawkaNOTS"
select="//Line[Line-Item/TaxCategoryCode=$lngStawkaNOTS]" />
<xsl:element name="Tax-Summary-Line">
<xsl:element name="TaxRate">
<xsl:value-of select="$lstStawkaNOTS/Line-Item/TaxRate"/>
</xsl:element>
<xsl:element name="TaxCategoryCode">
<xsl:value-of select="$lstStawkaNOTS/Line-Item/TaxCategoryCode"/>
</xsl:element>
<xsl:element name="TaxAmount">
<xsl:value-of select="sum($lstStawkaNOTS/Line-Item/TaxAmount)"/>
</xsl:element>
<xsl:element name="TaxableAmount">
<xsl:value-of select="sum($lstStawkaNOTS/Line-Item/NetAmount)"/>
</xsl:element>
<xsl:element name="GrossAmount">
<xsl:value-of
select="(sum($lstStawkaNOTS/Line-Item/TaxAmount))+(sum($lstStawkaNOTS/Line-Item/NetAmount))"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
| ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
