This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: xslt 2 grouping
- From: "G. Ken Holman" <gkholman at CraneSoftwrights dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Thu, 11 Jul 2002 10:58:43 -0400
- Subject: Re: [xsl] xslt 2 grouping
- Reply-to: xsl-list at lists dot mulberrytech dot com
At 2002-07-11 15:31 +0100, DPawson@rnib.org.uk wrote:
With the following XML I'm trying to group and find uniques
<p>
<el att='a'>x</el>
<el att='b'>x</el>
<el att='c'>x</el>
<el att='d'>y</el>
</p>
I have about 1200 lines of this, so keys are out.
Why discount keys?
I want to find all the el elements with content 'a'
which have *different* att attribute values,
to produce
<el name='x'>a b c </el>
Below is a solution that doesn't use keys. I've added this technique to
the Sorting/Grouping section of my XSLT training and the students have
found it useful.
I.e. list x, together with all the attributes att
which are different.
I'm guessing its a good one for xslt 2, for-each and group-by,
but I'm stumped on the syntax.
Are you required to use XSLT-2?
I hope this helps.
................... Ken
T:\ftemp>type dave.xml
<p>
<el att='a'>x</el>
<el att='b'>x</el>
<el att='c'>x</el>
<el att='d'>y</el>
</p>
T:\ftemp>type dave.xsl
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:variable name="allnames" select="/p/el"/>
<xsl:for-each select="$allnames">
<xsl:if test="generate-id(.)=generate-id($allnames[.=current()])">
<el name="{.}">
<xsl:variable name="allatts" select="$allnames[.=current()]"/>
<xsl:for-each select="$allatts">
<xsl:if test="generate-id(.)=
generate-id($allatts[@att=current()/@att])">
<xsl:value-of select="@att"/>
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</el>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
T:\ftemp>xt dave.xml dave.xsl
<?xml version="1.0" encoding="utf-8"?>
<el name="x">a b c </el>
<el name="y">d </el>
T:\ftemp>
--
Upcoming: 3-days XSLT/XPath and/or 2-days XSL-FO:Sep 30-Oct 4,2002
G. Ken Holman mailto:gkholman@CraneSoftwrights.com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (Fax:-0995)
ISBN 0-13-065196-6 Definitive XSLT and XPath
ISBN 1-894049-08-X Practical Transformation Using XSLT and XPath
ISBN 1-894049-07-1 Practical Formatting Using XSLFO
XSL/XML/DSSSL/SGML/OmniMark services, books (electronic, printed),
articles, training (instructor-live,Internet-live,web/CD,licensed)
Next public training: 2002-08-05,26,27,09-30,10-03
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list