This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Grouping with second choice
- To: XSL-List at lists dot mulberrytech dot com
- Subject: [xsl] Grouping with second choice
- From: Thorsten Liebig <liebig at informatik dot uni-ulm dot de>
- Date: Tue, 31 Jul 2001 11:22:02 +0200
- Organization: Abt. KI, Universität Ulm
- Reply-To: xsl-list at lists dot mulberrytech dot com
I want to group students according to their online registration which is
exported to xml similar to the file attached below (students.xml).
Registration
allows students to express a first and a second choice for their
exercise. Using
the Muenchian Method is appropriate for sorting with respect to a single
key, but how do I realize grouping with constraints, e.g. use the second
choice if the first cannot be fulfilled (group is full)? Any hints?
Thorsten
----------------------- classification.xsl
--------------------------------
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:key name="students-by-firstchoice" match="Student"
use="FirstChoice"/>
<xsl:template match="Course">
<xsl:element name="Classification">
<xsl:for-each select="Student[count(. | key('students-by-firstchoice',
FirstChoice)[1]) = 1]">
<xsl:sort select="FirstChoice" />
<xsl:element name="{FirstChoice}">
<xsl:for-each select="key('students-by-firstchoice',
FirstChoice)">
<xsl:sort select="RegistrationDate" />
<xsl:if test="position() <= 3">
<xsl:copy-of select="."/>
</xsl:if>
<xsl:if test="position() > 3">
<!-- use second choice for grouping -->
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
----------------------- students.xml -------------------------------
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Course>
<Student>
<RegistrationDate>20010725</RegistrationDate>
<FirstChoice>Group1</FirstChoice>
<SecondChoice>Group2</SecondChoice>
<Name>B</Name>
</Student>
<Student>
<RegistrationDate>20010724</RegistrationDate>
<FirstChoice>Group1</FirstChoice>
<SecondChoice>Group2</SecondChoice>
<Name>A</Name>
</Student>
<Student>
<RegistrationDate>20010726</RegistrationDate>
<FirstChoice>Group1</FirstChoice>
<SecondChoice>Group2</SecondChoice>
<Name>C</Name>
</Student>
<Student>
<RegistrationDate>20010723</RegistrationDate>
<FirstChoice>Group2</FirstChoice>
<SecondChoice>Group1</SecondChoice>
<Name>E</Name>
</Student>
<Student>
<RegistrationDate>20010722</RegistrationDate>
<FirstChoice>Group2</FirstChoice>
<SecondChoice>Group1</SecondChoice>
<Name>D</Name>
</Student>
<Student>
<RegistrationDate>20010727</RegistrationDate>
<FirstChoice>Group1</FirstChoice>
<SecondChoice>Group2</SecondChoice>
<Name>F</Name>
</Student>
</Course>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list