xsl-list
[Top] [All Lists]

[xsl] Grouping Problems XSLT2.0

2007-03-14 02:46:56
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[(_at_)class=("epigraphpara", "epigraphsource")] into an <epigraph> element. The para[(_at_)class="epigraphsource"] can either appear 1st or last. The para[(_at_)class="subsection1para"] must be group for every para[(_at_)class="subsection1para"][child::inline[(_at_)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


--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>