Re: [xsl] Apply for-each-group to a node subset

Subject: Re: [xsl] Apply for-each-group to a node subset
From: Tony Graham <Tony.Graham@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 21 Sep 2007 16:51:48 +0100
On Fri, Sep 21 2007 16:28:47 +0100, rocketraman@xxxxxxxxxxx wrote:
> Tony Graham wrote:
...
>> You may do better with:
>> 
>>    <xsl:apply-templates
>>       select="*[preceding-sibling::*[1][local-name() = 'g2']]"/>
>> 
>> which selects child elements whose first preceding sibling element (of
>> any type) is a 'g2'.
>
> That selects only the first preceding sibling, which results in only
> g1 nodes.

Sorry about that.  I had already worked out that I'd solved the wrong
problem.

...
> It works, but I still don't understand why a simple nested predicate
> does not work:
>
>      <!-- process nodes after group -->
>      <xsl:apply-templates select="*[preceding-sibling::g2[last()]]"/>
>
> The way I read this is: apply templates to all the nodes that have the
> LAST g2 as a preceding sibling, which should apply templates to all
> nodes n3 to n4.

It doesn't do as you expect because the current node list has changed
for each predicate.

This will work:

   <xsl:apply-templates
     select="g2[last()]/following-sibling::*"/>

Regards,


Tony Graham.
======================================================================
Tony.Graham@xxxxxxxxxxxxxxxxxxxxxx   http://www.menteithconsulting.com

Menteith Consulting Ltd             Registered in Ireland - No. 428599
Registered Office: 13 Kelly's Bay Beach, Skerries, Co. Dublin, Ireland
----------------------------------------------------------------------
Menteith Consulting -- Understanding how markup works
======================================================================

Current Thread