This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

removing nesting in data structure



In my ongoing quest to find a way around the problems I am having with
nested data and css, I have decided to try out the two pass solution.  I
know that if my data is held in a certain way, then I will have no
problems when it comes to converting it to html. 

So, the data is nested like this:

<?xml version="1.0"?>
<root>
  <para0>
    <para>para 0</para>
    <subpara1>
      <para>subpara 1</para>
      <subpara2>
        <para>subpara 2</para>
        <subpara3>
          <para>subpara 3</para>
        </subpara3>
      </subpara2>
    </subpara1>
  </para0>
</root>

Each subpara is a child of the preceding subpara, up to para0 which is
the top level. The nested element will always be the last child of the
parent.  Now the structure I would like is more flat, like this:

<root>
  <para0>
    <para>para 0</para>
  </para0>
  <subpara1>
    <para>subpara1</para>
  </subpara1>
  <subpara2>
    <para>subpara2</para>
  </subpara2>
  ...and so on
</root>

Ive written this template, that seems to do the job:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                version="1.0">

<xsl:template match="/">
  <xsl:apply-templates/>
</xsl:template>


<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>


<xsl:template match="para0|subpara1|subpara2|subpara3">
  <xsl:copy>
    <xsl:apply-templates
select="*[not(subpara1)][not(subpara2)][not(subpara3)]"/>
  </xsl:copy>
  <xsl:apply-templates select="subpara1|subpara2|subpara3"/>
</xsl:template>

</xsl:stylesheet>


Can anyone comment on this, is it the best way?  Is there an Xpath I
could use on the nested data that would select the data in this way,
avoiding the need for 2 passes?  Im pretty sure there isnt, but Im
constantly surprised by the new uses of xslt...

cheers
andrew

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.350 / Virus Database: 196 - Release Date: 17/04/2002
 

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]