OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Re: [xml-dev] xslt simple question

[ Lists Home | Date Index | Thread Index ]

Garland foster wrote:
> Hi, sorry but I can't figure out the xslt group and I know I can get a 
> quick question here.
>  
> It's something common so I want to know which is the best well-known 
> approach.
>  
> Let's say I have:
>  
> <exported-data>
> <department name="accounting">
>   <member>
>       <name>foo</name>
>   </member>
>   <member>
>        <name>Peter</name>
>   </member>
> </department>
> <department name="other">
> ....
> </exported-data>
>  
> And I want to create an xslt stylesheet to transform the XML into SQL 
> statements for the tables:
> department(id,name)
> members(id,name,deptid)
>  
> I can assume the tables are empty
>  
> Which is the best approach? obviously the problem is dealing with ids, 
> you have to mantain the id for each member of the
> department and "increment" ids as you create new departments/ members.
>  
> Thanks!
> Garland

You can use generate-id() like below:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
version="1.0">
     <xsl:output method="text"/>
     <xsl:template match="/">
         <xsl:apply-templates select="*"/>
     </xsl:template>
     <xsl:template match="department">
         <xsl:variable name="id" select="generate-id(.)"/>
         <xsl:text>insert into department values ('</xsl:text>
         <xsl:value-of select="$id"/>
         <xsl:text>', '</xsl:text>
         <xsl:value-of select="@name"/>
         <xsl:text>')
         </xsl:text>

         <xsl:apply-templates select="*">
             <xsl:with-param name="depid" select="$id"/>
         </xsl:apply-templates>
     </xsl:template>

     <xsl:template match="member">
         <xsl:param name="depid"></xsl:param>
         <xsl:variable name="id" select="generate-id(.)"/>
         <xsl:text>insert into person values ('</xsl:text>
         <xsl:value-of select="$id"/>
         <xsl:text>', '</xsl:text>
         <xsl:value-of select="name"/>
         <xsl:text>', '</xsl:text>
         <xsl:value-of select="$depid"/>
         <xsl:text>')
         </xsl:text>
     </xsl:template>
</xsl:stylesheet>

Regards,
  George
-------------------------------------------------------------
George Cristian Bina mailto:george@sync.ro
COO - sync.ro
Phone  +40-51-461480(1)
Fax       +40-51-461482
Mobile +40-93-224067
SyncRO Soft srl, Bd N. Titulescu 170, Craiova, 1100 - Romania
http://www.sync.ro
<oXygen/> XML Editor - http://oxygen.sync.ro/





 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS