Borut, with your CML input, the following XSL
<?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:template match="/">
<NewDataSet>
<xsl:for-each select="DataSet/Table[Level = 1]">
<xsl:variable name="next1"
select="./following-sibling::*[1]"/>
<Transport name="${Description}">
<xsl:for-each select="following-sibling::Table[Level = 2
and not(./following-sibling::Table = $next1)]">
<Brand name="${Description}">
</Brand>
</xsl:for-each>
</Transport>
</xsl:for-each>
</NewDataSet>
</xsl:template>
</xsl:stylesheet>
produces:
<NewDataSet>
<Transport name="$Cars">
<Brand name="$BMW"/>
<Brand name="$Citroen"/>
<Brand name="$Alfa Romeo"/>
</Transport>
<Transport name="$Motorcycles"/>
</NewDataSet>
I'm sure you can work out how to extend this to include models.
Regards,
--A
From: Borut BolÄ?ina <bob(_at_)najdi(_dot_)si>
Reply-To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] flat XML to normal XML
Date: Mon, 16 May 2005 12:24:45 +0200
Hello list,
I wish to transform an xml which has level information in each item (Table)
to xml which has hierarchy as stated in those item's element.
<DataSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Table>
<Level>1</Level>
<Description>Cars</Description>
</Table>
<Table>
<Level>2</Level>
<Description>BMW</Description>
</Table>
<Table>
<Level>3</Level>
<Description>316</Description>
</Table>
<Table>
<Level>3</Level>
<Description>Z4</Description>
</Table>
<Table>
<Level>2</Level>
<Description>Citroen</Description>
</Table>
<Table>
<Level>3</Level>
<Description>C2</Description>
</Table>
<Table>
<Level>3</Level>
<Description>C4 coupe</Description>
</Table>
<Table>
<Level>2</Level>
<Description>Alfa Romeo</Description>
</Table>
<Table>
<Level>3</Level>
<Description>156</Description>
</Table>
<Table>
<Level>1</Level>
<Description>Motorcycles</Description>
</Table>
...
...
</DataSet>
Target xml should look something like this:
<NewDataSet>
<Transport name="Cars">
<Brand name="BMW">
<Model>316</Model>
<Model>Z4</Model>
</Brand>
<Brand name="Citroen">
<Model>C2</Model>
<Model>C4 coupe</Model>
</Brand>
<Brand name="Alfa Romeo">
<Model>156</Model>
</Brand> </Transport>
<Transport name="Motorcycle">
...
</Transport>
</NewDataSet>
_________________________________________________________________
Don?t just search. Find. Check out the new MSN Search!
http://search.msn.click-url.com/go/onm00200636ave/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>
--~--