Subject: Re: [xsl] Creating a complex hierarchical structure from flat strcuture From: Jeff Sese <jsese@xxxxxxxxxxxx> Date: Fri, 16 Mar 2007 17:37:54 +0800 |
Hi,
This is a little deviation from my previous problem in http://www.biglist.com/lists/xsl-list/archives/200703/msg00310.html.
Now I have some flat xml like
<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="subsection2para"><inline class="subsection2title">...</inline></para>
<para class="subsection2para">...</para>
<para class="subsection2para">...</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>
</section>
that needs to be into this:
<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>
<subsection2>
<title><para class="subsection2para"><inline class="subsection2title">...</inline></para></title>
<para class="subsection2para">...</para>
<para class="subsection2para">...</para>
</subsection>
<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>
My current xsl:
<xsl:template match="section">
<section>
<xsl:for-each-group select="para" group-adjacent="replace(@class, 'epigraphsource', 'epigraphpara')">
<xsl:choose>
<xsl:when test="current-grouping-key() = 'epigraphpara'">
<epigraph>
<xsl:apply-templates select="current-group()"/>
</epigraph>
</xsl:when>
<xsl:when test="current-grouping-key() eq 'subsection1para'">
<xsl:for-each-group select="current-group()" group-starting-with="para[child::inline[@class='subsection1title']]">
<subsection1>
<xsl:apply-templates select="current-group()"/>
</subsection1>
</xsl:for-each-group>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</section>
</xsl:template>
Which so far produced:
<section>
<epigraph>
<para class="epigraphpara">...</para>
<para class="epigraphpara">...</para>
<para class="epigraphpara">...</para>
<para class="epigraphpara">...</para>
<para class="epigraphsource">...</para>
</epigraph>
<subsection1>
<para class="subsection1para"><inline class="subsection1title">...</inline></para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
</subsection1>
<para class="subsection2para"><inline class="subsection2title">...</inline></para>
<para class="subsection2para">...</para>
<para class="subsection2para">...</para>
<subsection1>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
</subsection1>
<subsection1>
<para class="subsection1para"><inline class="subsection1title">...</inline></para>
<para class="subsection1para">...</para>
<para class="subsection1para">...</para>
</subsection1>
</section>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Creating a complex hierarchic, Jeff Sese | Thread | Re: [xsl] Creating a complex hierar, David Carlisle |
[xsl] Creating a complex hierarchic, Jeff Sese | Date | Re: [xsl] Creating a complex hierar, David Carlisle |
Month |