xsl-list
[Top] [All Lists]

[xsl] Creating a complex hierarchical structure from flat strcuture

2007-03-16 00:35:42
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[(_at_)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>

--
*Jeff Sese*


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