[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Grouping elements using XSL

Subject: Re: Grouping elements using XSL
From: Josh Canfield <joshcanfield@xxxxxxxxx>
Date: Wed, 21 Jul 2004 18:12:15 -0700
xsl row count
Here is a solution for your problem to mull over...

Enjoy,
Josh


<?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet version="1.0" 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>

  <!-- key to return the ROW nodes with matchine DAYSOPEN nodes-->
  <xsl:key name="days-open" match="ROW" use="DAYSOPEN"/>
  <!-- key to return the ROW nodes with matchine MONTH nodes-->
  <xsl:key name="month" match="ROW" use="MONTH"/>

  <xsl:template match="/REPORT">
    <table>
    <!-- Build Header Row -->
    <tr><th>Days Open</th>
    <xsl:for-each select="DATA/ROW[count(. | key('month',MONTH)[1])=1]">
      <xsl:sort select="MONTH" data-type="text"/>
      <th><xsl:value-of select="MONTH"/></th>
    </xsl:for-each>
    <th>Total</th>
    </tr>

    <!-- Build the content Rows -->
    <!-- Iterate over the set of ROW nodes containing the first unique
DAYSOPEN value -->
    <xsl:for-each select="DATA/ROW[count(. | key('days-open', DAYSOPEN)[1])=1]">
      <xsl:sort select="DAYSOPEN" data-type="number"/>
      <!-- Hold on to the current days-open -->
      <xsl:variable name="days-open" select="DAYSOPEN"/>
      <tr>
        <td><xsl:value-of select="$days-open"/></td>
        <!-- Iterate over a set of ROW nodes contianing the first
unique MONTH value -->
        <xsl:for-each select="../ROW[count(. | key('month',MONTH)[1])=1]">
          <xsl:sort select="MONTH" data-type="text"/>
          <!-- create a cell containing the sum COUNT nodes from the
ROW nodes with common DAYSOPEN and MONTH nodes-->
          <td><xsl:value-of select="sum(../ROW[(DAYSOPEN=$days-open)
and (MONTH=current()/MONTH)]/COUNT)"/></td>
        </xsl:for-each>
        <!-- create a cell containing the sum of the COUNT nodes of
ROWs with a common DAYSOPEN node-->
        <td><xsl:value-of select="sum(../ROW[DAYSOPEN=$days-open]/COUNT)"/></td>
      </tr>
    </xsl:for-each>
    </table>
  </xsl:template>

</xsl:stylesheet>

On Wed, 21 Jul 2004 19:21:33 -0400, michael.s.eberhart@xxxxxxxxxxx
<michael.s.eberhart@xxxxxxxxxxx> wrote:
> 
> 
> Hi,
> 
> I'm new to XSL and need help (that is an understatement) grouping elements
> for display.  I have been reading up on several web sites, but I am still
> extremely confused.
> 
> My data looks like this:
> 
> <REPORT>
>      <DATA>
>            <ROW>
>                  <DAYSOPEN>12</DAYSOPEN>
>                  <REGION>MA</REGION>
>                  <MONTH>2004-01</MONTH>
>                  <COUNT>14</COUNT>
>            </ROW>
>            <ROW>
>                  <DAYSOPEN>15</DAYSOPEN>
>                  <REGION>RI</REGION>
>                  <MONTH>2004-02</MONTH>
>                  <COUNT>14</COUNT>
>            </ROW>
>            <ROW>
>                  <DAYSOPEN>12</DAYSOPEN>
>                  <REGION>OH</REGION>
>                  <MONTH>2004-01</MONTH>
>                  <COUNT>10</COUNT>
>            </ROW>
>            <ROW>
>                  <DAYSOPEN>9</DAYSOPEN>
>                  <REGION>MS</REGION>
>                  <MONTH>2004-02</MONTH>
>                  <COUNT>11</COUNT>
>            </ROW>
>            <ROW>
>                  <DAYSOPEN>12</DAYSOPEN>
>                  <REGION>PA</REGION>
>                  <MONTH>2004-03</MONTH>
>                  <COUNT>3</COUNT>
>            </ROW>
>      </DATA>
> </REPORT>
> 
> I need the display on the WEB page to be :
> 
> Days Open         2004-01           2004-02           2004-03
> Total
> 9                 0           11          0                 11
> 12                24          0           3                 27
> 15                0           14          0                 14
> 
> Region is ignored on this particular report but the data set will be used
> for multiple reports. All data including months can change each time app is
> executed.
> 
> Any help you can give me would be most greatly appreciated.
> 
> Thanks
> 
> Mike

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.