[xsl] Grouping Problems XSLT2.0

Subject: [xsl] Grouping Problems XSLT2.0
From: Jeff Sese <jsese@xxxxxxxxxxxx>
Date: Wed, 14 Mar 2007 17:46:33 +0800
Hi,

I have this flat structure:

<section>
<para class="epigraphpara">...</para>
<para class="epigraphpara">...</para>
<para class="epigraphpara">...</para>
<para class="epigraphpara">...</para>
<para class="epigraphsource">...</para>
<para class="subsection1para"><inline class="subsection1title">...</inline></para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para"><inline class="subsection1title">...</inline></para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
</section>


How can I achieve this using xsl:for-each-group:

<section>
<epigraph>
<para class="epigraphpara">...</para>
<para class="epigraphpara">...</para>
<para class="epigraphpara">...</para>
<para class="epigraphpara">...</para>
<para class="epigraphsource">...</para>
</epigraph>
<subsection1>
<title><para class="subsection1para"><inline class="subsection1title">...</inline></para></title>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
</subsection1>
<subsection1>
<title><para class="subsection1para"><inline class="subsection1title">...</inline></para></title>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
</subsection1>
</section>


I must group para[@class=("epigraphpara", "epigraphsource")] into an <epigraph> element. The para[@class="epigraphsource"] can either appear 1st or last. The para[@class="subsection1para"] must be group for every para[@class="subsection1para"][child::inline[@class="subsection1title"]].

I have this template so far:

<template match="section">
   <xsl:for-each-group select="node()" group-adjacent="@class">
      <xsl:choose>
         <xsl:when test="current-grouping-key() eq 'epigraphpara'">
            <epigraph>
               <xsl:apply-templates select="current-group()"/>
            </epigraph>
         </xsl:when>
         <xsl:otherwise>
              <xsl:apply-templates select="current-group()"/>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:for-each-group>
</template>

And I'm stuck at this point cause I don't know how can I include the other elements. Hope someone can give me ideas on how to work this out.

TIA!

-- Jeff

Current Thread