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

Re: Grouping nodes by date

Subject: Re: Grouping nodes by date
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Wed, 10 Jul 2002 13:11:19 -0700 (PDT)
xml select nodes on date
--- David Hirst <dhirst at mitre dot org> wrote:

> 
> I would like to be able to group a set of nodes based on the date
> (past
> dates and future dates)
> Is this possible (I have an extension function that returns a boolean
> if
> 
> a date is in the past).
> Currently I am selecting all the <items> arranging them in
> descindeing
> order and calling my extension function and possibly outputting data
> to
> the result tree. I was looking for a faster way to do this but have
> not
> found one to date.
> 
> so my xml looks something like
> <root>
>     <item>
>       <date>2002-07-07T12:00:00</date>
>    </item>
>     <item>
>       <date>2002-07-11T12:00:00</date>
>     </item>
>     <item>
>     ...
>     ...
>     </item>
> </root>
> 
> Thanks
> Dave Hirst
> 

Hi Dave,

Here's how to do it:

Let's have the following source xml (quite similar to yours):

<root>
  <item>
    <date>2002-07-07T19:00:00</date>
    <title>Supper</title>
  </item>
  <item>
    <date>2002-07-07T12:00:00</date>
    <title>Lunch</title>
  </item>
  <item>
    <date>2002-07-07T07:00:00</date>
    <title>Breakfast</title>
  </item>
  <item>
    <date>2002-07-11T20:00:00</date>
    <title>Supper</title>
  </item>
  <item>
    <date>2002-07-11T13:00:00</date>
    <title>Lunch</title>
  </item>
  <item>
    <date>2002-07-11T08:00:00</date>
    <title>Breakfast</title>
  </item>
</root>

The transformation bellow:

<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  
  <xsl:key name="kDate" match="item" 
           use="substring(date, 1, 10)"/>
  <xsl:template match="/">
    <xsl:for-each select="/*/item
                              [generate-id() 
                             = generate-id(key('kDate',
                                                substring(date,
                                                          1,
                                                          10)
                                               )
                                           )
                               ]">
         <xsl:sort select="date"/>
         <xsl:variable name="vthisDate" 
                       select="substring(date, 1, 10)"/>
         
         <date value="{$vthisDate}">
           
           <xsl:for-each select="/*/item
                                   [$vthisDate
                                   = substring(date, 1, 10)
                                   ]">
             <xsl:sort select="date"/>
             
             <event title="{title}" time="{substring(date, 12)}"/>
             <xsl:text>&#xA;</xsl:text>
           </xsl:for-each>
         </date>
         <xsl:text>&#xA;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

when applied to the source xml, produces the following result:

<date value="2002-07-07">
   <event title="Breakfast" time="07:00:00"/>

   <event title="Lunch" time="12:00:00"/>

   <event title="Supper" time="19:00:00"/>

</date>

<date value="2002-07-11">
   <event title="Breakfast" time="08:00:00"/>

   <event title="Lunch" time="13:00:00"/>

   <event title="Supper" time="20:00:00"/>

</date>


Hope this helped.

Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL




__________________________________________________
Do You Yahoo!?
Sign up for SBC Yahoo! Dial - First Month Free
http://sbc.yahoo.com

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


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.