[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: Creating a complex hierarchical structure from fla
Subject: Re: Creating a complex hierarchical structure from flat strcuture
From: Jeff Sese <jsese@xxxxxxxxxxxx>
Date: Fri, 16 Mar 2007 17:37:54 +0800
|
I have tried this template and managed to achieve my desired results:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="section">
<section>
<xsl:for-each-group select="para" group-adjacent="if
(matches(@class, 'epigraphsource'))
then replace(@class, 'epigraphsource',
'epigraphpara')
else if (matches(@class, 'subsection\dpara'))
then replace(@class, 'subsection\dpara',
'subsection1para')
else @class">
<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:for-each-group
select="current-group()" group-adjacent="replace(@class,
'subsection[23]para', 'subsection2para')">
<xsl:choose>
<xsl:when
test="current-grouping-key() eq 'subsection2para'">
<subsection2>
<xsl:for-each-group
select="current-group()" group-adjacent="replace(@class,
'subsection[3]para', 'subsection3para')">
<xsl:choose>
<xsl:when
test="current-grouping-key() eq 'subsection3para'">
<subsection3>
<xsl:apply-templates select="current-group()"/>
</subsection3>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</subsection2>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates
select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-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>
<xsl:template match="para[child::inline[matches(@class, 'title')]]">
<title>
<xsl:copy-of select="."/>
</title>
</xsl:template>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
However, i'm not sure upto what level my hierarchy is there a more
general or better way to do this?
--
*Jeff Sese*
Jeff Sese wrote:
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>
|
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format
RSS 2.0 |
|
Atom 0.3 |
|
|