Subject: Re: [xsl] Sorting Problem From: Jörg Heinicke <joerg.heinicke@xxxxxx> Date: Wed, 12 Sep 2001 23:46:17 +0200 |
Hi Dev, I think I understood: You want to know the "highest" school, which a pupil with this or that name attends. I build a dynamical version, I hope it was not to much "fun-work". I added the ranking-information to the XML like the following: <records> <pupil/> ... <schools> <school valuation="1">Cambridge</school> <school valuation="2">Oxford</school> <school valuation="3">Eton</school> </schools> </records> You can put this information to an extra-file or anywhere you want, you only must adapt the stylesheet then. Furthermore I don't know if it's a very nice solution, maybe somebody has a better one. <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output indent="yes"/> <xsl:key name="pupils" match="pupil" use="name"/> <xsl:template match="records"> <xsl:copy> <xsl:apply-templates select="pupil[count(.|key('pupils',name)[1])=1]"> <xsl:sort select="count(key('pupils',name))" order="descending"/> </xsl:apply-templates> </xsl:copy> </xsl:template> <xsl:template match="pupil"> <xsl:copy> <xsl:apply-templates select="name"/> </xsl:copy> </xsl:template> <xsl:template match="name"> <xsl:copy> <xsl:value-of select="."/> </xsl:copy> <school> <xsl:call-template name="getSchool"> <xsl:with-param name="schools"> <xsl:for-each select="key('pupils',.)/school"> <xsl:value-of select="text()"/> </xsl:for-each> </xsl:with-param> </xsl:call-template> </school> </xsl:template> <xsl:template name="getSchool"> <xsl:param name="schools"/> <xsl:param name="valuation" select="'1'"/> <xsl:choose> <xsl:when test="contains($schools,/records/schools/school[@valuation=$valuation])"> <xsl:value-of select="/records/schools/school[@valuation=$valuation]"/> </xsl:when> <xsl:otherwise> <xsl:call-template name="getSchool"> <xsl:with-param name="schools" select="$schools"/> <xsl:with-param name="valuation" select="$valuation + 1"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> Do you understand the stylesheet? The working with keys, especially the 'count(.|key('pupils',name)[1])=1'-construct? This is the 'grouping using the muenchian method'. More information on this you can find here: http://www.jenitennison.com/xslt/grouping/muenchian.html. Hope this helps for the first. Joerg XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Sorting Problem, Dev Chandramani | Thread | RE: [xsl] Sorting Problem, Dev Chandramani |
RE: [xsl] Fast Processor XSLt, Paul Brown | Date | [xsl] Problems with Parser MSXML4 J, Paulo Henrique S. Be |
Month |