xsl-list
[Top] [All Lists]

Re: nested grouping ( solved)

2003-04-03 07:37:49
Hi all,
I Think I have done it. The following is what I did and it seems to be
working fine.. Please advice
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:key match="/films/slot" name="unique-days" use="date/text()"/>
 <xsl:key match="/films/slot" name="unique-films" use="film/@id"/>
 <xsl:template match="/">
  <xsl:for-each select="/films/slot[generate-id(.) =
generate-id(key('unique-days',date/text())[1])]">
   <u>
    <b> Date **
     <xsl:value-of select="date"/>
    </b>
   </u>
   <br/>
   <xsl:variable name="dayid"  select="date/text()"/>
   <xsl:for-each select="/films/slot[generate-id(.) =
generate-id(key('unique-films',film/@id)[1])]">
   Film Type :
    <b>
     <xsl:value-of select="film/@id"/>
    </b> **
    <br/>
    <xsl:for-each select="key('unique-films',film/@id)[date = $dayid]">

     <br/>
    Film :
     <b>
      <xsl:value-of select="film"/>
     </b>

     <br/>
    </xsl:for-each>
    <br/>
   </xsl:for-each>
   <hr/>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>
Cheers

----- Original Message -----
From: "Laura Jenkins" <xsl_list(_at_)hotmail(_dot_)com>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Thursday, April 03, 2003 2:56 PM
Subject: [xsl] nested grouping


Dear All,
I have a problem with grouping. I name it double grouping as I cant get a
better name gor it.
Here it goes. I have an XML which looks like

<?xml version="1.0"?>
<films>
 <slot id = "1">
  <date>day1</date>
  <film id = "horror">Horror-Movie1</film>
 </slot>
 <slot id = "2">
  <date>day1</date>
  <film id = "horror">Horror-Movie2</film>
 </slot>
 <slot id = "3">
  <date>day1</date>
  <film id = "adult">Adult-Movie1</film>
 </slot>
 <slot id = "4">
  <date>day1</date>
  <film id = "adult">Adult-Movie2</film>
 </slot>
 <slot id = "5">
  <date>day2</date>
  <film id = "horror">Horror-Movie3</film>
 </slot>
 <slot id = "6">
  <date>day2</date>
  <film id = "horror">Horror-Movie4</film>
 </slot>
 <slot id = "7">
  <date>day2</date>
  <film id = "adult">Adult-Movie3</film>
 </slot>
 <slot id = "8">
  <date>day2</date>
  <film id = "adult">Adult-Movie4</film>
 </slot>
</films>
and i want to group based on date and within that based on film ids..

In other words, I want the output (HTML) to look like:

Date ** day1
  Horror Movies
    Film Type : horror ** Film :Horror-Movie1
    Film Type : horror ** Film :Horror-Movie2
  Adult Movies
    Film Type : adult ** Film :Adult-Movie1
    Film Type : adult ** Film :Adult-Movie2
Date ** day2

Horror Movies
    Film Type : horror ** Film :Horror-Movie3
    Film Type : horror ** Film :Horror-Movie4
Adult Movies
    Film Type : adult ** Film :Adult-Movie3
    Film Type : adult ** Film :Adult-Movie4


I wrote an xsl that would go as far as grouping based on the dates..to
produce an output that looks like..

Date ** day1
Film Type : horror ** Film :Horror-Movie1
Film Type : horror ** Film :Horror-Movie2
Film Type : adult ** Film :Adult-Movie1
Film Type : adult ** Film :Adult-Movie2
Date ** day2
Film Type : horror ** Film :Horror-Movie1
Film Type : horror ** Film :Horror-Movie1
Film Type : adult ** Film :Adult-Movie1
Film Type : adult ** Film :Adult-Movie2

I cant get my heads around doing what I want. I tried many weird
combination
using the keys but couldnt get what I wanted The xsl i wrote is as
follows..

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:key match="/films/slot" name="unigue-days" use="date/text()"/>
 <xsl:template match="/">
  <xsl:for-each select="/films/slot[generate-id(.) =
generate-id(key('unique-days',date/text())[1])]">
   <u><b> Date ** <xsl:value-of select="date"/></b></u>
   <br/>
   <xsl:for-each select="key('unique-days',date/text())">
     Film Type : <b> <xsl:value-of select="film/@id"/></b> **
    Film :<b><xsl:value-of select="film"/></b>

    <br/>
   </xsl:for-each>
   <hr/>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>.


It would be of great help if someone could suggest me some way of grouping
elements in the way I wanted.
Cheers.

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>