|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: flat XML to normal XML
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[@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/
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








