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(_at_)asiatype(_dot_)com]
Sent: 14 March 2007 09:47
To: Xsl-List
Subject: [xsl] 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[(_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="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
--~------------------------------------------------------------------
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>
--~--
--~------------------------------------------------------------------
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>
--~--