Re: [xsl] Finding the following sibling of same type

Subject: Re: [xsl] Finding the following sibling of same type
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Sun, 29 Aug 2004 21:47:20 +0100
Hi Kenneth,

> Actually, the real problem is for me to write an XPath expression
> that will select all children of "main" from the first "first" upto
> (but exluding) the next "first". Hence my desire to locate the
> position of the next "first".

The easiest way to do this is to create a key that indexes all the
non-<first> children of the <main> element by their nearest preceding
<first> element:

<xsl:key name="first-group"
         use="generate-id(preceding-sibling::first[1])" />

Then you can get all the elements that 'belong to' the first <first>
element using:

  key('first-group', generate-id(/main/first[1]))

I'm using generate-id() here, but your actual XML might have an id
attribute or something similar that you could use to uniquely identify
the <first> elements instead.

If you're trying to transform into:


and you're using XSLT 2.0, then you want to use the
<xsl:for-each-group> with group-starting-with. In XSLT 1.0 using keys
like the one above is probably the simplest approach.



Jeni Tennison

Current Thread