Subject: 3 level grouping From: Nathan Shaw <n8_shaw@xxxxxxxxx> Date: Tue, 8 Jun 2004 14:15:40 -0700 (PDT) |
Hi all. I am using the Meunchian method to group some event calendar output. It is currently only grouped by two levels, those being year and month. However, the requirements have changed and I now need to group the output by category, then year and then month. I cannot figure out how to do this. Could someone lend a hand? The relevant XML and XSLT is listed below. Thank you very much in advance! XML <obprcal:top xmlns="http://spaceresearch.nasa.gov/calendar" xmlns:obprcal="http://spaceresearch.nasa.gov/calendar" xmlns:xcal="http://www.ietf.org/internet-drafts/draft-ietf-calsch-many-xcal-01.txt"> <xcal:vcalendar xcal:version="2.0" xcal:prodid="-//nasa.gov/NONSGML Code U Extranet Calendar Service//EN" obprcal:category="Education Events" obprcal:timeperiod=""> <xcal:vevent> <obprcal:timeframe/> <obprcal:eventid>29</obprcal:eventid> <xcal:summary>A test future event.</xcal:summary> <xcal:location>Home</xcal:location> <xcal:categories>Education Events</xcal:categories> <xcal:dtstart>20040212</xcal:dtstart> <obprcal:dtstart_year>2004</obprcal:dtstart_year> <obprcal:dtstart_month>02</obprcal:dtstart_month> <obprcal:dtstart_day>12</obprcal:dtstart_day> <obprcal:dtstart_hour>00</obprcal:dtstart_hour> <obprcal:dtstart_minute>00</obprcal:dtstart_minute> <obprcal:dtstart_second>00</obprcal:dtstart_second> <xcal:dtend>20040212</xcal:dtend> <obprcal:dtend_year>2004</obprcal:dtend_year> <obprcal:dtend_month>02</obprcal:dtend_month> <obprcal:dtend_day>12</obprcal:dtend_day> <obprcal:dtend_hour>00</obprcal:dtend_hour> <obprcal:dtend_minute>00</obprcal:dtend_minute> <obprcal:dtend_second>00</obprcal:dtend_second> <xcal:url>url</xcal:url> </xcal:vevent> <xcal:vevent> <obprcal:timeframe/> <obprcal:eventid>27</obprcal:eventid> <xcal:summary>Education future</xcal:summary> <xcal:location>Your place</xcal:location> <xcal:categories>Education Events</xcal:categories> <xcal:dtstart>20040210T080000</xcal:dtstart> <obprcal:dtstart_year>2004</obprcal:dtstart_year> <obprcal:dtstart_month>02</obprcal:dtstart_month> <obprcal:dtstart_day>10</obprcal:dtstart_day> <obprcal:dtstart_hour>08</obprcal:dtstart_hour> <obprcal:dtstart_minute>00</obprcal:dtstart_minute> <obprcal:dtstart_second>00</obprcal:dtstart_second> <xcal:dtend>20040210T170000</xcal:dtend> <obprcal:dtend_year>2004</obprcal:dtend_year> <obprcal:dtend_month>02</obprcal:dtend_month> <obprcal:dtend_day>10</obprcal:dtend_day> <obprcal:dtend_hour>17</obprcal:dtend_hour> <obprcal:dtend_minute>00</obprcal:dtend_minute> <obprcal:dtend_second>00</obprcal:dtend_second> <xcal:url>url</xcal:url> </xcal:vevent> </xcal:vcalendar> <xcal:vcalendar xcal:version="2.0" xcal:prodid="-//nasa.gov/NONSGML Code U Extranet Calendar Service//EN" obprcal:category="General Interest" obprcal:timeperiod=""> <xcal:vevent> <obprcal:timeframe/> <obprcal:eventid>29</obprcal:eventid> <xcal:summary>A test future event.</xcal:summary> <xcal:location>Home</xcal:location> <xcal:categories>Education Events</xcal:categories> <xcal:dtstart>20040212</xcal:dtstart> <obprcal:dtstart_year>2004</obprcal:dtstart_year> <obprcal:dtstart_month>02</obprcal:dtstart_month> <obprcal:dtstart_day>12</obprcal:dtstart_day> <obprcal:dtstart_hour>00</obprcal:dtstart_hour> <obprcal:dtstart_minute>00</obprcal:dtstart_minute> <obprcal:dtstart_second>00</obprcal:dtstart_second> <xcal:dtend>20040212</xcal:dtend> <obprcal:dtend_year>2004</obprcal:dtend_year> <obprcal:dtend_month>02</obprcal:dtend_month> <obprcal:dtend_day>12</obprcal:dtend_day> <obprcal:dtend_hour>00</obprcal:dtend_hour> <obprcal:dtend_minute>00</obprcal:dtend_minute> <obprcal:dtend_second>00</obprcal:dtend_second> <xcal:url>url</xcal:url> </xcal:vevent> <xcal:vevent> <obprcal:timeframe/> <obprcal:eventid>27</obprcal:eventid> <xcal:summary>Education future</xcal:summary> <xcal:location>Your place</xcal:location> <xcal:categories>Education Events</xcal:categories> <xcal:dtstart>20040210T080000</xcal:dtstart> <obprcal:dtstart_year>2004</obprcal:dtstart_year> <obprcal:dtstart_month>02</obprcal:dtstart_month> <obprcal:dtstart_day>10</obprcal:dtstart_day> <obprcal:dtstart_hour>08</obprcal:dtstart_hour> <obprcal:dtstart_minute>00</obprcal:dtstart_minute> <obprcal:dtstart_second>00</obprcal:dtstart_second> <xcal:dtend>20040210T170000</xcal:dtend> <obprcal:dtend_year>2004</obprcal:dtend_year> <obprcal:dtend_month>02</obprcal:dtend_month> <obprcal:dtend_day>10</obprcal:dtend_day> <obprcal:dtend_hour>17</obprcal:dtend_hour> <obprcal:dtend_minute>00</obprcal:dtend_minute> <obprcal:dtend_second>00</obprcal:dtend_second> <xcal:url>url</xcal:url> </xcal:vevent> </xcal:vcalendar> </obprcal:top> XSLT: <xsl:key name="kStartDateYear" match="xcal:vevent" use="obprcal:dtstart_year"/> <xsl:key name="kStartDateMonth" match="xcal:vevent" use="concat(obprcal:dtstart_year,obprcal:dtstart_month)"/> <xsl:key name="kCategory" match="xcal:vevent" use="xcal:categories"/> <!-- VCALENDAR --> <xsl:template match="xcal:vcalendar"> <xsl:variable name="currCategory" select="@obprcal:category"/> <Section Title="{@obprcal:category} Calendar"> <xsl:if test="$l_timeperiodUrlSafe = ''"> <br/> <a href="webcal://spaceresearch.nasa.gov/calendar/OBPR_{@obprcal:category}.vcs" printURL="yes">Subscribe to this category's iCal</a>  | <a href="http://spaceresearch.nasa.gov/calendar/OBPR_{@obprcal:category}.vcs" printURL="yes">Download this category's iCal</a> <!-- the use of the $webhost variable is commented out for now until we figure out a better way to handle generating the proper URL <a href="webcal://{$webhost}/calendar/OBPR_{$l_categoryUrlSafe}.vcs" printURL="yes">Subscribe to this category's iCal</a>  | <a href="http://{$webhost}/calendar/OBPR_{$l_categoryUrlSafe}.vcs" printURL="yes">Download this category's iCal</a> --> </xsl:if> </Section> <xsl:for-each select="xcal:vevent[count(. | key('kCategory', xcal:categories)[1]) = 1]"> <xsl:for-each select="key('kStartDateYear', obprcal:dtstart_year)[count(.|key('kStartDateYear',obprcal:dtstart_year)[1]) = 1]"> <xsl:sort select="obprcal:dtstart_year" data-type="number" order="descending"/> <Section Title="{obprcal:dtstart_year}"> <xsl:for-each select="key('kStartDateYear', obprcal:dtstart_year)[count(.|key('kStartDateMonth', concat(obprcal:dtstart_year,obprcal:dtstart_month))[1]) = 1]"> <xsl:sort select="obprcal:dtstart_month" data-type="number" order="descending"/> <xsl:variable name="monthName"> <xsl:call-template name="dt:get-month-name"> <xsl:with-param name="month" select="obprcal:dtstart_month"/> </xsl:call-template> </xsl:variable> <SubSection Title="{$monthName}"> <br/> <xsl:for-each select="key('kStartDateMonth', concat(obprcal:dtstart_year,obprcal:dtstart_month))"> <DataTable CellSpacing="0" CellPadding="2" Border="0"> <xsl:apply-templates select="xcal:summary"/> <xsl:call-template name="StartEndDateTime"/> <xsl:apply-templates select="xcal:categories"/> <xsl:apply-templates select="xcal:location"/> <xsl:apply-templates select="xcal:description"/> <xsl:apply-templates select="xcal:url"/> </DataTable> <br/> </xsl:for-each> <br/> </SubSection> </xsl:for-each> </Section> </xsl:for-each> </xsl:for-each> </xsl:template> __________________________________ Do you Yahoo!? Friends. Fun. Try the all-new Yahoo! Messenger. http://messenger.yahoo.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Lookup question -- attemp, Mir Farooq Ali | Thread | Re: [xsl] 3 level grouping, G. Ken Holman |
RE: [xsl] Lookup question -- attemp, Kienle, Steven C | Date | Re: [xsl] Lookup question -- attemp, Mir Farooq Ali |
Month |