Subject: RE: Grouping Problems XSLT2.0
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 14 Mar 2007 11:23:39 -0000
|
It looks to me like
<xsl:for-each-group select="para"
group-starting-with="*[class='epigraphpara' or (class='subsection1para' and
inline)]">
(then having done hte grouping you need to inspect the first element of each
group to see what element to output)
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Jeff Sese [mailto:jsese@xxxxxxxxxxxx]
> Sent: 14 March 2007 09:47
> To: Xsl-List
> Subject: Grouping Problems XSLT2.0
>
> 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="subsectio
> n1title"]].
>
> 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
|