|
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:00pmAdvanced 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 |