Re: [xsl] nested grouping ( solved)

Subject: Re: [xsl] nested grouping ( solved)
From: "Laura Jenkins" <xsl_list@xxxxxxxxxxx>
Date: Thu, 3 Apr 2003 15:37:49 +0100
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@xxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
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


Current Thread