Subject: RE: [xsl] SQL BTree to XML Tree? From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 18 Jan 2006 10:57:36 -0000 |
> I'm storing a btree in sql in the following manner: > > +----------------------------+ > | Table: Departments | > +----------------------------+ > | id | name | lh | rh | > +----------------------------+ > | 1 | Managers | 1 | 6 | > | 2 | Supervisors | 2 | 5 | > | 3 | Employees | 3 | 4 | > | 4 | Directors | 7 | 8 | > +----------------------------+ > The Celko technique. Illustrating the lengths people will go to to bend their data to make it fit in a relational database! > This is being converted to xml, resulting in: > > <output> > <item> > <id>1</id> > <name>Managers</name> > <lh>1</lh> > <rh>2</rh> ----------^ should be 6, I assume > </item> > <!-- etc --> > </output> > > I need to translate this using XSL to this: > > <group> > <department title="Managers"> > <department title="Supervisors" /> > <department title="Employees" /> > </department> > <department title="Directors" /> > </group> > May not be very efficient, but what comes to mind is that your data gives you the descendant relationship very easily: <xsl:function name="f:descendants" as="element(item)*"> <xsl:param name="boss" as="element(item)"/> <xsl:sequence select="$boss/../item[lh gt $boss/lh and rh le $boss/rh]"/> </xsl:function> and you can deduce from this the child relationship (as being those descendants who are not descendants of a descendant): <xsl:function name="f:children" as="element(item)*"> <xsl:param name="boss" as="element(item)"/> <xsl:variable name="descendants" select="f:descendants($boss) <xsl:sequence select="$descendants except (for $i in $descendants return f:descendant($i))"/> </xsl:function> and then you can do a recursive descent using the logical child relationship in the usual way: <xsl:template match="item"> <department title="@name"> <xsl:apply-templates select="f:children(.)"/> </department> </xsl:template> Not tested and almost certainly needs a bit of fine tuning. And of course if you're in XSLT 1.0 you'll have to rewrite the algorithm completely. Michael Kay http://www.saxonica.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] SQL BTree to XML Tree?, Phillip B Oldham | Thread | Re: [xsl] SQL BTree to XML Tree?, drkm |
[xsl] SQL BTree to XML Tree?, Phillip B Oldham | Date | Re: [xsl] SQL BTree to XML Tree?, drkm |
Month |