Thanks for you help, Mukul. When I read your solution, it makes perfect
sense to me.
Mick
-----Oorspronkelijk bericht-----
Van: Mukul Gandhi [mailto:mukul_gandhi(_at_)yahoo(_dot_)com]
Verzonden: zaterdag 3 juli 2004 15:41
Aan: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Onderwerp: RE: [xsl] sorting and grouping
Hi Mick,
Please find below the Muenchian Grouping solution to
the problem described by you -
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="by-jan" match="person[birthmonth =
'January']" use="birthday"/>
<xsl:template match="/persons">
<xsl:for-each select="person[birthmonth =
'January']">
<xsl:sort select="birthday" data-type="number"/>
<xsl:if test="generate-id(.) =
generate-id(key('by-jan', birthday)[1])">
<xsl:value-of
select="birthday"/><xsl:text>
</xsl:text>
<xsl:for-each select="key('by-jan', birthday)">
<xsl:sort select="name"/>
<xsl:value-of
select="name"/><xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Regards,
Mukul
--- "m.vanrootseler" <m(_dot_)vanrootseler(_at_)chello(_dot_)nl> wrote:
Thanks for the link, Michael. I was already afraid
I'd have to use Muenchian
grouping, something that I've never done before.
Mick
-----Oorspronkelijk bericht-----
Van: Michael Kay [mailto:mhk(_at_)mhk(_dot_)me(_dot_)uk]
Verzonden: vrijdag 2 juli 2004 14:57
Aan: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Onderwerp: RE: [xsl] sorting and grouping
You'll find the answer at
http://www.jenitennison.com/xslt/grouping
Michael Kay
-----Original Message-----
From: m.vanrootseler
[mailto:m(_dot_)vanrootseler(_at_)chello(_dot_)nl]
Sent: 02 July 2004 13:40
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] sorting and grouping
I've got a sorting problem. My XML is as follows:
<person>
<name>Kermit</name>
<birthday>3</birthday>
<birthmonth>January</birthmonth>
</person>
etc.
XSLT:
<xsl:for-each
select="person[birthmonth='January']">
<xsl:sort select="birthday"
data-type="number"/>
<xsl:sort select="name"/>
<xsl:value-of select="birthday"/>
<xsl:text> - </xsl:text>
<xsl:value-of select="name"/>
<br/>
</xsl:for-each>
With the above code, each birthday number is
repeated. What I
would like is
to have the birthday number appear only once
followed by the
names of people
whose birthday that is. I suspect it can be done
by testing
if the birthday
value is the same as the preceding sibling, but I
can't get
it right. Does
anyone have any idea how to solve this?
Mick
__________________________________
Do you Yahoo!?
Yahoo! Mail is new and improved - Check it out!
http://promotions.yahoo.com/new_mail
--+------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--