This is more XSL-esque:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml" omit-xml-declaration="yes"/>
<xsl:key match="Table" name="k-transport" use="Level"/>
<xsl:key match="Table[Level=2]" name="k-brand"
use="preceding-sibling::Table[Level = 1][1]"/>
<xsl:key match="Table[Level=3]" name="k-model"
use="preceding-sibling::Table[Level = 2][1]"/>
<xsl:template match="/">
<NewDataSet>
<xsl:apply-templates select="key('k-transport', 1)"/>
</NewDataSet>
</xsl:template>
<xsl:template match="Table[Level = 1]">
<Transport name="{Description}">
<xsl:apply-templates select="key('k-brand', .)"/>
</Transport>
</xsl:template>
<xsl:template match="Table[Level = 2]">
<Brand name="{Description}">
<xsl:apply-templates select="key('k-model', .)"/>
</Brand>
</xsl:template>
<xsl:template match="Table[Level = 3]">
<Model name="{Description}"></Model>
</xsl:template>
</xsl:stylesheet>
and this says I'm bored:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml" omit-xml-declaration="yes"/>
<xsl:key match="Table" name="k-L1" use="Level"/>
<xsl:key match="Table[Level=2]" name="k-L2"
use="preceding-sibling::Table[Level = 1][1]"/>
<xsl:key match="Table[Level=3]" name="k-L3"
use="preceding-sibling::Table[Level = 2][1]"/>
<xsl:variable name="Levels"
select="document('')//xsl:template[(_at_)name='Levels']/Level"/>
<xsl:template name="Levels">
<Level name="Transport"/>
<Level name="Brand"/>
<Level name="Model"/>
</xsl:template>
<xsl:template match="/">
<NewDataSet>
<xsl:apply-templates select="key('k-L1', 1)"/>
</NewDataSet>
</xsl:template>
<xsl:template match="Table">
<xsl:variable name="name" select="$Levels[position() =
current()/Level]/@name"/>
<xsl:element name="{$name}">
<xsl:attribute name="name"><xsl:value-of
select="Description"/></xsl:attribute>
<xsl:if test="Level < count($Levels)">
<xsl:apply-templates select="key(concat('k-L', Level + 1),
.)"/>
</xsl:if>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
But they both produce this:
<NewDataSet>
<Transport name="Cars">
<Brand name="BMW">
<Model name="316"/>
<Model name="Z4"/>
</Brand>
<Brand name="Citroen">
<Model name="C2"/>
<Model name="C4 coupe"/>
</Brand>
<Brand name="Alfa Romeo">
<Model name="156"/>
</Brand>
</Transport>
<Transport name="Motorcycles">
<Brand name="Kawasaki">
<Model name="Ninja"/>
</Brand>
<Brand name="Suzuki">
<Model name="Katana"/>
</Brand>
</Transport>
</NewDataSet>
--A
_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar ? get it now!
http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/
--~------------------------------------------------------------------
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>
--~--