RE: [xsl] Selecting a range of siblings between specified elements.

Subject: RE: [xsl] Selecting a range of siblings between specified elements.
From: Jarno.Elovirta@xxxxxxxxx
Date: Mon, 8 Mar 2004 16:26:26 +0200
Hi,

> I'm currently a little puzzled on how to select a range of 
> siblings between 
> specified elements, e.g.
> 
> <?xml version="1.0"?>
> <doc>
> <a>cont1</a><b/><b/>
> <a>cont2</a><b/><b/>
> <a>cont3</a><b/><b/><c/><c/>
> <a>cont4</a><b/><b/><c/><c/>
> </doc>
> 
> 
> I would like to select firstly the <b/><b/> of
> 
> <a>cont1</a><b/><b/>

e.g. a[. = 'cont1']/following-sibling::b[position() <= 2]
 
> then the <b/><b/> of
> 
> <a>cont2</a><b/><b/>
> 
> then the <b/><b/> of
> 
> <a>cont3</a><b/><b/><c/><c/>
> 
> and finally the <b/><b/> of
> 
> <a>cont4</a><b/><b/><c/><c/>

Erm... I wonder if you mean

    <xsl:for-each select="a">
      <xsl:apply-templates select="following-sibling::b[generate-id(preceding-sibling::a[1]) = generate-id(current()) ]"/>
    </xsl:for-each>

I.e. you want to group b elements according to their previous a element. See Jeni's pages on grouping <http://jenitennison.com/xslt/grouping/>.

Cheers,

Jarno - KiEw: Graograman (Leæther Strip remix)

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


Current Thread