|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Another grouping question
Here is a template that will give you the output you requested....
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text" indent="yes"/>
<xsl:template match="/">
<xsl:call-template name="table">
<xsl:with-param name="nodes" select="/root/type/kind/age"/>
<xsl:with-param name="title" select="'ALL TYPES'"/>
</xsl:call-template>
<xsl:for-each select="/root/type">
<xsl:call-template name="table">
<xsl:with-param name="nodes" select="kind/age"/>
<xsl:with-param name="title" select="concat('TYPE ',@name)"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="table">
<xsl:param name="nodes"/>
<xsl:param name="title"/>
<xsl:text>

</xsl:text>
<xsl:value-of select="$title"/>
<xsl:text>
AGE DIV_TOTAL SEC HGT KIU
</xsl:text>
<xsl:call-template name="row">
<xsl:with-param name="minAge" select="0"/>
<xsl:with-param name="maxAge" select="3"/>
<xsl:with-param name="nodes" select="$nodes"/>
</xsl:call-template>
<xsl:text>
</xsl:text>
<xsl:call-template name="row">
<xsl:with-param name="minAge" select="4"/>
<xsl:with-param name="maxAge" select="5"/>
<xsl:with-param name="nodes" select="$nodes"/>
</xsl:call-template>
<xsl:text>
</xsl:text>
<xsl:call-template name="row">
<xsl:with-param name="minAge" select="6"/>
<xsl:with-param name="maxAge" select="10"/>
<xsl:with-param name="nodes" select="$nodes"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="row">
<xsl:param name="minAge"/>
<xsl:param name="maxAge"/>
<xsl:param name="nodes"/>
<xsl:variable name="byAge" select="$nodes[number(@name) >=
$minAge and number(@name) <= $maxAge]"/>
<xsl:value-of select="$minAge"/><xsl:text>-</xsl:text><xsl:value-of
select="$maxAge"/><xsl:text> </xsl:text>
<xsl:value-of select="sum($byAge/division)"/><xsl:text> </xsl:text>
<xsl:value-of select="sum($byAge/division[@name='SEC'])"/><xsl:text>
</xsl:text>
<xsl:value-of select="sum($byAge/division[@name='HGT'])"/><xsl:text>
</xsl:text>
<xsl:value-of select="sum($byAge/division[@name='KIU'])"/><xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Josh
On Sat, 21 Aug 2004 00:53:56 +0000, William Jordan
<williamhjordan@xxxxxxxxxxx> wrote:
> Sorry about this question. I know there have been many questions regarding
> grouping, but I for one am still not getting it.
>
> Here is my problem.
>
> I am using XSLT1.0
>
> My data is in this format.
>
> <type name="UNIT1">
> <kind name="DMI">
> <age name="2">
> <division name="SEC">9</division>
> <division name="HGT">4</division>
> <division name="KIU">12<division>
> </age>
> <age name="3">
> <division name="SEC">4</division>
> <division name="HGT">56</division>
> <division name="KIU">125<division>
> </age>
> <age name="5">
> <division name="SEC">61</division>
> <division name="HGT">316</division>
> <division name="KIU">83<division>
> </age>
> </kind>
> <kind name="TYD">
> <age name="3">
> <division name="SEC">8</division>
> <division name="HGT">71</division>
> <division name="KIU">948</division>
> </age>
> <age name="10">
> <division name="SEC">794</division>
> <division name="HGT">51</division>
> <division name="KIU">6</division>
> </age>
> </kind>
> </type>
> <type name="UNIT2">
> <kind name="POR">
> <age name="10">
> <division name="SEC">7</division>
> <division name="HGT">94</division>
> <division name="KIU">5</division>
> </age>
> </kind>
> </type>
>
> My xsl file should first sum all divisions, grouped by the number of days
> aged <age>. So, for the first table, the first row (0 - 3), records where
> age is between 0 and 3 should be included. For the second row, records
> where the age is between 4 and 5 should be included. All types are
included
> in this first table.
>
> The second table should include only those records where type = UNIT1. The
> rows will work the same (row 1 where age is between 0 and 3, etc...).
>
> Same for the third table.
>
> The output should be thus
>
> ALL TYPES
> AGE DIV_TOTAL SEC HGT KIU
> 0 3 1237 21 131 1085
> 4 5 460 61 316 83
> 6 10 957 801 145 11
>
> TYPE UNIT1
> AGE DIV_TOTAL SEC HGT KIU
> 0 3 210 13 60 137
> 4 5 460 61 316 83
> 6 10 957 794 51 6
>
> TYPE UNIT2
> AGE DIV_TOTAL SEC HGT KIU
> 0 3 0 0 0 0
> 4 5 0 0 0 0
> 6 10 106 7 94 5
>
> I know everyone must be getting tired of grouping questions. I have read
up
> on them and still don't get how to do them in XSLT.
>
> Thanks in advance
>
> Bill
>
> _________________________________________________________________
> Express yourself instantly with MSN Messenger! Download today - it's FREE!
> http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








