Subject: Re: [xsl] [XSLT2] Some common, generic grouping problems From: David Carlisle <davidc@xxxxxxxxx> Date: Thu, 29 Jun 2006 23:54:09 +0100 |
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="*[@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="*[@color=('dark-red')]"> <xsl:choose> <xsl:when test="@color=('dark-red')"> <xsl:variable name="l" select="current-group()[@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>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] [XSLT2] Some common, generic , Christian Roth | Thread | Re: [xsl] [XSLT2] Some common, gene, David Carlisle |
Re: [xsl] Moving (promoting) XML el, David Carlisle | Date | RE: [xsl] mass validation of xml fi, Michael Kay |
Month |