xsl-list
[Top] [All Lists]

RE: flat XML to normal XML

2005-05-16 06:54:39
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>
--~--