xsl-list
[Top] [All Lists]

RE: [xsl] using xsl:for-each-group, grouping by child nodes?

2008-10-04 05:32:56
Of course it's possible, and not really difficult. 

I have to say my instinct would be to start by transforming this into more
XML-like XML, something like

<players>
  <player>
    <name>joe</name>
    <age>2</age>
    <position>fielder</position>
    <state>ny</state>
    <team>mets</team>

because all subsequent processing you do on the data would then be a lot
clearer. (I know the number isn't the player's age, but I have no idea what
it actually is...)

With that it would be

<xsl:template match="players">
  <xsl:for-each-group select="player" group-by="concat(team, state)">
     <xsl:value-of select="current-grouping-key()"/>
     <xsl:for-each-group select="current-group()" group-by="position">
       <...

Now, if you don't want to do the preprocessing, you just substitute
different expressions into the above:

players -> RESULTSET
player -> ROW
team -> COL[5]/DATA
state -> COL[4]/DATA

etc.

Michael Kay
http://www.saxonica.com/

-----Original Message-----
From: Eric Scheid [mailto:eric(_dot_)scheid(_at_)ironclad(_dot_)net(_dot_)au] 
Sent: 04 October 2008 08:39
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] using xsl:for-each-group, grouping by child nodes?


I have export data that looks like this:

<RESULTSET FOUND="6">
    <ROW MODID="3" RECORDID="1">
        <COL><DATA>joe</DATA></COL>
        <COL><DATA>2</DATA></COL>
        <COL><DATA>pitcher</DATA></COL>
        <COL><DATA>ny</DATA></COL>
        <COL><DATA>mets</DATA></COL>
    </ROW>
    <ROW MODID="3" RECORDID="2">
        <COL><DATA>mark</DATA></COL>
        <COL><DATA>11</DATA></COL>
        <COL><DATA>outfielder</DATA></COL>
        <COL><DATA>ny</DATA></COL>
        <COL><DATA>mets</DATA></COL>
    </ROW>
    <ROW MODID="3" RECORDID="3">
        <COL><DATA>jane</DATA></COL>
        <COL><DATA>13</DATA></COL>
        <COL><DATA>outfielder</DATA></COL>
        <COL><DATA>ny</DATA></COL>
        <COL><DATA>cubs</DATA></COL>
    </ROW>
    <ROW MODID="3" RECORDID="4">
        <COL><DATA>mike</DATA></COL>
        <COL><DATA>7</DATA></COL>
        <COL><DATA>outfielder</DATA></COL>
        <COL><DATA>ny</DATA></COL>
        <COL><DATA>mets</DATA></COL>
    </ROW>
</RESULTSET>

I'm trying to transform it into this:

    Team: mets, ny
        pitchers:
            joe, 2
        oufielders:
            mark, 11
            mike, 7

    Team: cubs, ny
        outfielders:
            jane, 13

.. so naturally I thought of using for-each-group, only 
problem is I can't find any examples which shows how to 
group-by using values in the child nodes .. so I don't know 
if this is even possible, let alone exactly how to specify 
it. I've tried a few different things to no avail.

Is this even possible?

e.


--
Ironclad Networks
Information Architecture
http://www.ironclad.com.au/

"Providing tactical IA services to web agencies"


--~------------------------------------------------------------------
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>
--~--



--~------------------------------------------------------------------
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>
--~--