This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: making grandparents of grandchildren
- From: Jarno dot Elovirta at nokia dot com
- To: xsl-list at lists dot mulberrytech dot com
- Date: Thu, 10 Jan 2002 17:21:11 +0200
- Subject: RE: [xsl] making grandparents of grandchildren
- Reply-to: xsl-list at lists dot mulberrytech dot com
> What I tried for some time to achieve in vain, is group paintings
> belonging to same owners under their names sorted and add author names
> to each picture in the list. Would really appreciate your help (or our
> exhibition in Madrid will have to be postponed :).
How about
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
indent="yes"
encoding="ISO-8859-1" />
<xsl:key name="owner" match="owner" use="." />
<xsl:key name="picture" match="picture" use="owner" />
<!-- this should match the parent of authorgroup elements-->
<xsl:template match="foo">
<!-- get unique owners -->
<xsl:apply-templates select="authorgroup/picture/owner[generate-id(.)
= generate-id(key('owner', .))]" mode="sort">
<xsl:sort select="." />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="owner" mode="sort">
<ownergroup>
<name>
<xsl:value-of select="." />
</name>
<!-- list pictures by this owner-->
<xsl:apply-templates select="key('picture', .)" />
</ownergroup>
</xsl:template>
<xsl:template match="picture">
<xsl:copy>
<author>
<xsl:value-of select="ancestor::authorgroup[1]/name" />
</author>
<xsl:apply-templates select="*[not(self::owner)]" />
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
It's the fourth Monday of this week, so I wouldn't be surprised if it
didn't work - Anyhow, it should generate
<ownergroup>
<name></name>
<picture>
<author></author>
<title></title>
<inv><inv>
</picture>
<picture>
...
</picture>
</ownergroup>
<ownergroup>
...
</ownergroup>
Santtu
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list