Re: [xsl] two-level grouping xslt 2.0

Subject: Re: [xsl] two-level grouping xslt 2.0
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Thu, 28 Feb 2008 19:05:42 +0100
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