[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] xslt 2. index-of, nodes


Subject: Re: [xsl] xslt 2. index-of, nodes
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Thu, 3 Jul 2003 15:02:30 +0100

Dave,

>> Erm... my point was that if you were processing the group as a whole
>> then you could use the position() function to get you the position of
>> the <loc> within the group. Something like:
>> 
>>   <xsl:for-each-group select="loc" group-by="@hl">
>>     <xsl:for-each-group select="current-group()" group-by="@side">
>>       <xsl:for-each-group select="current-group()" group-by="@pos">
> Ah!
>   That's clearer. I've just been fighting group-by="concat...
>   which fails :-)

Oh? It shouldn't fail -- you should be able to do:

  <xsl:for-each-group select="loc"
                      group-by="concat(@hl, '+', @side, '+', @pos)">
    ...
  </xsl:for-each-group>

instead of the nesting above, just like you would in the use attribute
of <xsl:key> in 1.0.

Or you can do:

  <xsl:for-each-group select="loc"
                      group-by="string-join((@hl, @side, @pos), '+')">
    ...
  </xsl:for-each-group>

The reason that I didn't use it in the example is that (a) using
concat() is ugly (and string-join() only marginally less so),
particularly because you have to come up with a suitable separator for
the values that you want to include in the grouping key and (b) if
your attributes were typed (e.g. @pos as an xs:integer) then using
separate <xsl:for-each-group>s gives you datatype-aware grouping,
whereas using concat() or string-join() won't unless you are careful.

>> (I can't believe that no one apart from me is bothered about having
>> to nest <xsl:for-each-group> as in the above when you want to group
>> by several things at once.)
>
> Is this a starter for ten for Jeni's own equivalent of Muenchian
> techniques?

I would personally prefer something like:

  <xsl:for-each select="loc">
    <xsl:group by="@hl" />
    <xsl:group by="@side" />
    <xsl:group by="@pos" />
    ...
  </xsl:for-each>

but I've suggested it before and no one else seems to think it's worth
changing.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread