Subject: RE: converting flat xml data into heirarchy structure
From: "Andreas L. Delmelle" <a_l.delmelle@xxxxxxxxxx>
Date: Mon, 9 Feb 2004 11:29:16 +0100
|
> -----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[@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[@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[@parent_id=$vId]">
<scopes>
<xsl:apply-templates select="following::scope[@parent_id=$vId]" />
</scopes>
</xsl:if>
Cheers,
Andreas
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|