RE: [xsl] Grouping of irregular XML

Subject: RE: [xsl] Grouping of irregular XML
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 21 Feb 2006 09:11:20 -0000
Simplest answer is to use XSLT 2.0 with

<xsl:for-each-group select="*" group-adjacent="node-name(.)">
  <xsl:choose>
    <xsl:when test="current-group[1] instance of element(aaa)">
      <ol>
        <xsl:copy-of select="current-group()"/>
      </ol>
    </xsl:when>
    <xsl:otherwise>
      <xsl:copy-of select="current-group()"/>
    </
  </
</

For XSLT 1.0 solutions, search under "XSLT positional grouping".

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

> -----Original Message-----
> From: Paul Clarke [mailto:pclarke@xxxxxxxxxxxxxxxx] 
> Sent: 21 February 2006 07:02
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Grouping of irregular XML
> 
> Hi All,
> 
> I'm just coming back to XSLT after a long lay off doing other 
> things and am
> struggling with grouping irregular xml content from a converter.
> 
> I have this as an input.
> 
> <body>
> 	<aaa>
> 		..
> 	</aaa>
> 	<aaa>
> 		..
> 	</aaa>
> 	<bbb>
> 		..
> 	</bbb>
> 	<aaa>
> 		..
> 	</aaa>
> 	<aaa>
> 		..
> 	</aaa>
> </body>
> 
> And I need to put the groups of <aaa> elements in a deeper structure
> 
> <body>
> 	<ol>
> 		<aaa>
> 			..
> 		</aaa>
> 		<aaa>
> 			..
> 		</aaa>
> 	</ol>
> 	<bbb>
> 		..
> 	</bbb>
> 	<ol>
> 		<aaa>
> 			..
> 		</aaa>
> 		<aaa>
> 			..
> 		</aaa>
> 	</ol>
> </body>
> 
> Should I be using xsl:key here or another method?
> 
> Thanks
> 
> Paul Clarke 

Current Thread