interesting little challenge...
<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="*[(_at_)color=('dark-red','light-red')]">
<xsl:choose>
<xsl:when test="@color=('light-red')"/>
<xsl:when test="@color=('dark-red')">
<red>
<xsl:copy-of
select="current-group(),current-group()[last()]/following-sibling::*"/>
</red>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</root>
</xsl:template>
</xsl:stylesheet>
<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="*[(_at_)color=('dark-red')]">
<xsl:choose>
<xsl:when test="@color=('dark-red')">
<xsl:variable name="l"
select="current-group()[(_at_)color='red'][last()]"/>
<red>
<xsl:copy-of select="current-group()[. << $l],$l"/>
</red>
<xsl:copy-of select="current-group()[. >> $l]"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</root>
</xsl:template>
</xsl:stylesheet>
<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-adjacent="(replace(@color,'dark-',''),1)[1]">
<xsl:choose>
<xsl:when test="@color">
<xsl:for-each-group select="current-group()"
group-starting-with="*[starts-with(@color,'dark-')]">
<xsl:element name="{replace(@color,'dark-','')}">
<xsl:copy-of select="current-group()"/>
</xsl:element>
</xsl:for-each-group>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</root>
</xsl:template>
</xsl:stylesheet>
$ saxon8 gp1.xml gp1.xsl
<?xml version="1.0" encoding="UTF-8"?>
<root>
<arbitrary/>
<red>
<elem color="dark-red"/>
<elem color="red"/>
<arbitrary color="none"/>
<elem color="red"/>
<elem color="light-red"/>
<arbitrary/>
</red>
</root>
$ saxon8 gp2.xml gp2.xsl
<?xml version="1.0" encoding="UTF-8"?>
<root>
<arbitrary/>
<red>
<elem color="dark-red"/>
<elem color="red"/>
<arbitrary/>
<elem color="red"/>
</red>
<arbitrary/>
<red>
<elem color="dark-red"/>
<elem color="red"/>
<arbitrary/>
<elem color="red"/>
</red>
<arbitrary/>
</root>
$ saxon8 gp3.xml gp3.xsl
<?xml version="1.0" encoding="UTF-8"?>
<root>
<arbitrary/>
<red>
<elem color="red"/>
<elem color="red"/>
</red>
<red>
<elem color="dark-red"/>
<elem color="red"/>
</red>
<arbitrary/>
<red>
<elem color="red"/>
</red>
<red>
<elem color="dark-red"/>
</red>
<arbitrary/>
</root>
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--