|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Break on first - question
Hi,
> Note: Since this is my calendar, I can write the startDate and endDate as
> xsl:date (<startDate>2003-01-25</startDate>), and in fact would prefer to.
If you did, you would currently have to extract the year, month and
day using substring() or similar; that's probably not a particular
hardship, in fact with the grouping that you want to do it's
marginally easier, so I'm going to assume that you've done this.
> I have many EVENT records and need to sort them (I can do the sort
> just fine) by date and title, and then produce HTML that breaks on
> each new month (or year) so I can insert some formatting etc.. So
> it's a grouping issue. How in the world do I do it? Whatever I try
> gives me some success (=complete failure) but I can't get every new
> month to behave itself.
Using the Muenchian Method, create a key that indexes your <EVENT>
elements by the month (and year) of their <eventDate>:
<xsl:key name="events" match="EVENT"
use="substring(venue/eventDate/startDate, 1, 7)" />
Now you can get all the events that start in January 2003 with the
function call:
key('events', '2003-01')
So given a particular event you could create a list of all the events
that occurred in the same month as that event, sorted by their date,
using:
<xsl:template match="EVENT" mode="month-group">
<xsl:variable name="month"
select="substring(venue/eventDate/startDate, 1, 7)" />
<h3><xsl:value-of select="$month" /></h3>
<xsl:apply-templates select="key('events', $month)"
mode="details">
<xsl:sort select="venue/eventDate/startDate" />
</xsl:apply-templates>
</xsl:template>
(Assuming that you have a template matching EVENT elements in details
mode that gives the details about an EVENT.)
You only want to process the first EVENT of each month using the
month-group template above, so you have to apply templates to only
that set of elements. This is where the Muenchian trick comes in. Use:
<xsl:apply-templates mode="month-group"
select="EVENT[generate-id() =
generate-id(
key('events',
substring(venue/eventDate/startDate, 1, 7))[1])]">
<xsl:sort select="venue/eventDate/startDate" />
</xsl:apply-templates>
This selects the first listed EVENT for each month, sorts them in date
order, and applies templates to them in month-group mode.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
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








