RE: [xsl] Grouping simple flat structure

Subject: RE: [xsl] Grouping simple flat structure
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 17 Mar 2008 12:42:34 -0000
There's a very early description of this problem at

http://www.stylusstudio.com/xsllist/199910/post00560.html

and a solution using the technique often called "sibling recursion" at

http://www.stylusstudio.com/xsllist/199910/post50560.html

(Interesting that these posts predate the publication of XSLT 1.0!)

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

> -----Original Message-----
> From: Ian Proudfoot [mailto:ian.proudfoot@xxxxxxxxxxx] 
> Sent: 17 March 2008 12:28
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Grouping simple flat structure
> 
> I have a blind spot when it comes to grouping flat XML 
> structure using XSLT 1.0. 
> 
> My source XML structure is typically as follows (simplified 
> for clarity):
> 
> <section>
>   <title/>
>   <warning/>
>   <warning/>
>   <para/>
>   <warning/>
>   <warning/>
>   <para/>
>   <para/>
> </section>
> 
> I would like to group adjacent <warning> elements to give 
> this structure:
> 
> <section>
>   <title/>
>   <w-group>
>     <warning/>
>     <warning/>
>   </w-group>
>   <para/>
>   <w-group>
>     <warning/>
>     <warning/>
>   </w-group>
>   <para/>
>   <para/>
> </section> 
> 
> I've tried using Muenchian Grouping, but I'm going wrong 
> somewhere. I started by trying to identify the start of each 
> group using <xsl:template 
> match="warning[(preceding-sibling::*[1])[not(self::warning)]]"
>... As a starting point is this correct, it does seem to > capture the
first warning in each group? After that I cannot 
> grab the following <warning> sibling elements correctly. 
> 
> 
> For this project I am stuck with XSLT 1.0 and Xalan-C 
> 
> Thanks for all help.
> Ian

Current Thread