Re: [xsl] [XSLT2] Some common, generic grouping problems

Subject: Re: [xsl] [XSLT2] Some common, generic grouping problems
From: "andrew welch" <andrew.j.welch@xxxxxxxxx>
Date: Fri, 30 Jun 2006 10:31:25 +0100
On 6/30/06, David Carlisle <davidc@xxxxxxxxx> wrote:

oops I got the first one wrong, still in some places in the world it's not midnight,someone else can fix it before I wake up:-)

This one solves the first one:


<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:output indent="yes"/>

<xsl:template match="root">
<root>
<xsl:for-each-group select="*" group-starting-with="*[@color='dark-red']">
  <xsl:choose>
    <xsl:when test="self::*[@color='dark-red']">
		<xsl:for-each-group select="current-group()"
group-ending-with="*[@color='light-red']">
			<xsl:choose>
				<xsl:when test="current-group()[last()][self::*[@color='light-red']]">
					<red>
						<xsl:copy-of select="current-group()"/>
					</red>
				</xsl:when>
				<xsl:otherwise>
					<xsl:copy-of select="."/>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:for-each-group>
    </xsl:when>
    <xsl:otherwise>
    	<xsl:copy-of select="."/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:for-each-group>
</root>
</xsl:template>
</xsl:stylesheet>

A pair of nested for-each-groups, gives this result:

<root>
  <arbitrary/>
  <red>
     <elem color="dark-red"/>
     <elem color="red"/>
     <arbitrary color="none"/>
     <elem color="red"/>
     <elem color="light-red"/>
  </red>
  <arbitrary/>
</root>

cheers
andrew

Current Thread