XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
todd jacksonSubject: calling templates based on order of node sets
Author: todd jackson
Date: 26 May 2009 08:05 PM
Originally Posted: 26 May 2009 07:07 PM
I'm having problems ordering a list of occurrences, for start & end dates, for tertiary courses, based on which campus they are run at.

I can get all the occurences dates for each course listed if I replace the for-each block in the XSLT (see below) and use "<xsl:apply-templates select="COURSEDEFINITION/COURSEOCCURRENCES/COURSEOCCURRENCE"/>" in its place. But it doesn't work when I use the for-each block, and want to order all the dates for courses running under their respective campus?

An example the source xml is :

<COURSES>
<COURSEDEFINITION>
<COURSE_CODE>243.023</COURSE_CODE>
<COURSE_TITLE>Communication Skills</COURSE_TITLE>
<CBD_CATEGORY>Communication</CBD_CATEGORY>
<COURSEOCCURRENCES>
<COURSEOCCURRENCE>
<CAMPUS>Highbrook</CAMPUS>
<ACTIVITYOCCURRENCES>
<ACTIVITYOCCURRENCE>
<ACTIVITY_CODE>243.023-091B-S01-01</ACTIVITY_CODE>
<START_DATE>10/06/2009</START_DATE>
<END_DATE>24/06/2009</END_DATE>
<STATUS>Live</STATUS>
<SUBSTATUS>Running</SUBSTATUS>
<TIMESLOTS>
<TIMESLOT>
<START_TIME>11 June 2009, 09:00:00</START_TIME>
<END_TIME>11 June 2009, 12:00:00</END_TIME>
</TIMESLOT>
</TIMESLOT>
<TIMESLOT>
<START_TIME>24 June 2009, 09:00:00</START_TIME>
<END_TIME>24 June 2009, 12:00:00</END_TIME>
</TIMESLOT>
</TIMESLOTS>
</ACTIVITYOCCURRENCE>
</ACTIVITYOCCURRENCES>
</COURSEOCCURRENCE>
<COURSEOCCURRENCE>
<CAMPUS>Strathbourne</CAMPUS>
<ACTIVITYOCCURRENCES>
<ACTIVITYOCCURRENCE>
<ACTIVITY_CODE>243.023-091B-S01-01</ACTIVITY_CODE>
<TIMESLOTS>
<TIMESLOT>
<START_TIME>10 June 2009, 09:00:00</START_TIME>
<END_TIME>10 June 2009, 12:00:00</END_TIME>
</TIMESLOT>
</ACTIVITYOCCURRENCE>
</ACTIVITYOCCURRENCES>
</COURSEOCCURRENCE>
<COURSEOCCURRENCE>
<CAMPUS>Highbrook</CAMPUS>
<ACTIVITYOCCURRENCES>
<ACTIVITYOCCURRENCE>
<ACTIVITY_CODE>243.023-091B-S01-01</ACTIVITY_CODE>
<TIMESLOTS>
<TIMESLOT>
<START_TIME>10 June 2009, 09:00:00</START_TIME>
<END_TIME>10 June 2009, 12:00:00</END_TIME>
</TIMESLOT>
</ACTIVITYOCCURRENCE>
</ACTIVITYOCCURRENCES>
</COURSEOCCURRENCE>
<COURSEOCCURRENCE>
etc.........

My XSLT is :
....
<p><span class="Subhead3">Date and Times</span></p>
<xsl:for-each select="COURSEDEFINITION/COURSEOCCURRENCES/COURSEOCCURRENCE">
<xsl:choose>
<xsl:when test="contains(string(./CAMPUS)) 'Highbrook')">
<p><strong>Strathbourne</strong></p>
<xsl:apply-templates select="."/>
</xsl:when>
<xsl:when test="contains(string(./CAMPUS)), 'Strathbourne')">
<xsl:apply-templates select="."/>
</xsl:when>
etc..
</xsl:choose>
</xsl:for-each>


<xsl:template match="COURSEOCCURRENCE">
<xsl:if test="((php:function('dateUnixFormated', string(./START_DATE)) >= $currUDate) and ((./TIMETABLE) or (./ACTIVITYOCCURRENCES/ACTIVITYOCCURRENCE//TIMESLOTS/TIMESLOT)))">
<xsl:for-each select="ACTIVITYOCCURRENCES/ACTIVITYOCCURRENCE/TIMESLOTS/TIMESLOT">
<span class="Subhead4"><xsl:value-of select="php:function('date', 'l', php:function('strtotime', substring-before(./START_TIME,',')))"/></span>
etc...
</xsl:for-each>
</xsl:if>

</xsl:template>

Output I want to achieve:

Date and Times

Highbrook

Tuesday 10 June 2009 09:00 - 12:00

Wednesday 11 June 2009 09:00 - 12:00

Thursday 24 June 2009 09:00 - 12:00

Strathbourne

Tuesday 10 June 2009 09:00 - 12:00


etc..

Hope someone can help with my noobie XSLT skills!

Cheers

Posttop
James DurningSubject: calling templates based on order of node sets
Author: James Durning
Date: 27 May 2009 01:27 PM
Muenchian grouping:
List of all campuses:
/COURSES/COURSEDEFINITION/COURSEOCCURENCE/CAMPUS

Get all unique instances:
<xsl:for-each select="/COURSES/COURSEDEFINITION/COURSEOCCURENCE/CAMPUS[not(.=preceding::CAMPUS)]">
Campus: <xsl:value-of select="."/>

Now, inside this for-loop, find all the COURSEDEFINITIONS that take place on this campus. Use current() to get the value of the current node.
<xsl:for-each select="/COURSES/COURSEDEFINITION[COURSEOCCURENCE/CAMPUS = current()]">
...
Output the relevant date information here.

</xsl:for-each>
</xsl:for-each>


Also in the future, please post the end tags at the end of your xml, so your code sample is well-formed xml.

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.