xsl-list
[Top] [All Lists]

RE: converting flat xml data into heirarchy structure

2004-02-09 03:29:16
-----Original Message-----
From: Andreas L. Delmelle

<snip />

Oops, forgot a few details:
<?xml version="1.0" encoding="UTF-8" ?>

  <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

<xsl:template match="scopes">
  <!-- apply templates on all scope elements
       with parent_id '0' -->
  <xsl:apply-templates select="scope[(_at_)parent_id='0']" />
</xsl:template>

<xsl:template match="scope">
  <!-- create a var to hold the current scope's id -->
  <xsl:variable name="vId" select="@id" />

  <xsl:copy>
    <!-- copy attributes -->
    <xsl:apply-templates select="@*" />
    <scopes>
      <!-- now apply templates on all scope elements
           with parent_id equal to current id -->
      <xsl:apply-templates select="//scope[(_at_)parent_id=$vId]" />
    </scopes>
</xsl:template>

  </xsl:stylesheet>

On second thought, if the descending scope-elements *always* appear after
their parent, this will be better performance-wise (starting right before
creating the scopes-element in the second template above):

      <xsl:if test="following::scope[(_at_)parent_id=$vId]">
        <scopes>
          <xsl:apply-templates select="following::scope[(_at_)parent_id=$vId]" 
/>
        </scopes>
      </xsl:if>


Cheers,

Andreas


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