[
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/
|