Re: [xsl] xslt 2 grouping

Subject: Re: [xsl] xslt 2 grouping
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Thu, 11 Jul 2002 10:58:43 -0400
At 2002-07-11 15:31 +0100, DPawson@xxxxxxxxxxx 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@xxxxxxxxxxxxxxxxxxxx
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



Current Thread