Subject: [xsl] Sorting and grouping From: Marshal Linfoot <marshal@xxxxxxxx> Date: Fri, 20 Dec 2002 14:54:08 -0500 |
xml example---------- <schedule>
<classes type="Basic"> <class> <name>Class BBB</name> <day>Sunday</day><dsort>7</dsort><dsort>7</dsort> <time>2:30pm to 4:00pm</time><tsort>1430</tsort> </class> <class> <name>Class AAA</name> <day>Monday</day><dsort>1</dsort> <time>7:30pm to 9:00pm</time><tsort>1930</tsort> </class> <class> <name>Class BBB</name> <day>Tuesday</day><dsort>2</dsort> <time>7:30pm to 9:00pm</time><tsort>1930</tsort> </class> <class> <name>Class AAA</name> <day>Wednesday</day><dsort>3</dsort> <time>5:00pm to 6:30pm</time><tsort>1700</tsort> </class> <class> <name>Class BBB</name> <day>Tuesday</day><dsort>2</dsort> <time>11:00am to 12:30pm</time><tsort>1100</tsort> </class> </classes> <classes type="Advanced"> <class> <name>Class ZZZ</name> <day>Sunday</day><dsort>7</dsort><dsort>7</dsort> <time>2:30pm to 4:00pm</time><tsort>1430</tsort> </class> <class> <name>Class XXX</name> <day>Thursday</day><dsort>4</dsort> <time>7:00pm to 9:00pm</time><tsort>1900</tsort> </class> <class> <name>Class XXX</name> <day>Tuesday</day><dsort>2</dsort> <time>7:30pm to 9:00pm</time><tsort>1930</tsort> </class> </classes>
Desired Output------------- Basic Classes: Class AAA Monday 7:30pm to 9:00pm Wednesday 5:00pm to 6:30pm
Class BBB Tuesday 11:00am to 12:30pm Tuesday 7:30pm to 9:00pm Sunday 2:30pm to 4:00pm
Advanced Classes: Class XXX Tuesday 7:30pm to 9:00pm Thursday 7:00pm to 9:00pm
<!-- Define a key for grouping classes by name. --> <xsl:key name="kName" match="class" use="name" />
<xsl:template match="schedule"> <xsl:apply-templates /> </xsl:template>
<!-- Match the first class in the group. Output all columns. --> <xsl:template match="class" mode="distinct-start"> <tr> <td><xsl:apply-templates select="name"/></td> <td><xsl:apply-templates select="day"/></td> <td><xsl:apply-templates select="time"/></td> </tr> <xsl:apply-templates select="key('kName',name)" /> </xsl:template>
<!-- Match the other classes in the group. Output blank class name and other columns. --> <xsl:template match="class"> <xsl:if test="not(generate-id() = generate-id(key('kName',name)))"> <tr> <td><xsl:text> </xsl:text></td> <td><xsl:apply-templates select="day"/></td> <td><xsl:apply-templates select="time"/></td> </tr> </xsl:if> <xsl:if test="position() = last()"> <tr><td><xsl:text> </xsl:text></td></tr> </xsl:if> </xsl:template>
Thanks in advance for any ideas. -- Marshal Linfoot
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Fw: XPath question:"Filter" a, Vasu Chakkera | Thread | Re: [xsl] Sorting and grouping, Joerg Heinicke |
RE: [xsl] XSL Message, Greg Faron | Date | [xsl] namespace-alias isn't changin, Gourav Raj Budhia |
Month |