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