[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
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]"/>
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 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:
--A
_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar get it now! http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/
RE: [xsl] flat XML to normal XML
Subject: RE: [xsl] flat XML to normal XML From: "Aron Bock" <aronbock@xxxxxxxxxxx> Date: Tue, 17 May 2005 01:46:57 +0000 |
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/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] flat XML to normal XML, Aron Bock | Thread | RE: [xsl] flat XML to normal XML, Michael Kay |
RE: [xsl] Variable scope, Aron Bock | Date | Re: [xsl] word (not string) wrap, Mukul Gandhi |
Month |