Subject: Re: [xsl] two-level grouping xslt 2.0 From: Terry Ofner <tofner@xxxxxxxxxxx> Date: Thu, 28 Feb 2008 13:54:08 -0500 |
<book> <bodymatter> !--level1 opening element goes here--> <story> <cluster_num>Cluster One</cluster_num> </story> <!--level2 opening element goes here--> <story> <story-title>story one</story-title> </story> <story> <imggroup>image ref</imggroup> </story> <story> <pagenum>1</pagenum> </story> <story> <p></p> <p></p> <p></p> </story> <story> <p></p> <p></p> <p></p> </story> <!--level2 closing element goes here-->
<!--level2 opening element goes here--> <story> <story-title>tory two</story-title> </story>
<story> <p></p> <p></p> <p></p> </story> <story> <p></p> <p></p> <p></p> </story> <!--level2 closing element goes here--> !--level1 closing element goes here-->
!--level1 opening element goes here--> <story> <cluster_num>Cluster Two</cluster_num> </story>
</bodymatter> </book>
Terry Ofner 1541 Northbrook Drive Indianapolis, IN 46260 Voice: 317-870-1992 Fax: 317-870-7101
Terry Ofner wrote:Sorry about the poor xml of the input. It was way too long to include and my edit dropped off some closing </story> tags. I have tried to fix in the output and input below.
The following stylesheet groups by groups starting with story [cluster_num] and then simply processes the groups where story [story-title] have a special template wrapping those elements in a level2 element. That achieves the result you have described.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template>
<xsl:template match="bodymatter"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:for-each-group select="*" group-starting-with="story[cluster_num]"> <level1 class="unit" unitnum="{position()}"> <xsl:apply-templates select="current-group()"/> </level1> </xsl:for-each-group> </xsl:copy> </xsl:template>
<xsl:template match="story[story-title]"> <level2 class="selection"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </level2> </xsl:template>
</xsl:stylesheet> --
Martin Honnen http://JavaScript.FAQTs.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] two-level grouping xslt 2, Martin Honnen | Thread | Re: [xsl] two-level grouping xslt 2, Martin Honnen |
Re: [xsl] Insert elment in XSD, Martin Honnen | Date | RE: [xsl] Insert elment in XSD, Michael Kay |
Month |