[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: Application Design
- From: Matt Sergeant <matt@sergeant.org>
- To: Frank Richards <frichards@softquad.com>
- Date: Mon, 13 Aug 2001 15:22:30 +0100 (BST)
On Mon, 13 Aug 2001, Frank Richards wrote:
> Well, I've hit one thing I couldn't see how to do in XSLT:
>
> I had a situation where the RDBMS guys had taken a perfectly good tree and
> turned it into a
> table with an extra column identifying the parent record. In order to
> convert it back, I needed
> a stack to push the parents on to. A list would have worked, but I couldn't
> figure out any way
> to get dynamic temporary storage in XSLT.
Assuming the XML format out is something like:
<database>
<table name="treething">
<row id="1" column1="foo" column2="bar"/>
<row id="2" parent_id="1" column1="a" column2="b"/>
...
</table>
</database>
Couldn't you just do:
<xsl:template match="row">
<xsl:variable name="current_id" select="@id"/>
<element>
<column1><xsl:value-of select="@column1"/></column1>
<column2><xsl:value-of select="@column2"/></column2>
<children>
<xsl:apply-templates
select="/database/table/row[@parent_id=$current_id]"/>
</children>
</element>
</xsl:template>
<xsl:template match="/">
<elements>
<xsl:apply-templates select="/database/table/row[not @parent_id]"/>
</elements>
</xsl:template>
In XSLT, the call stack is your temporary storage.
Now I'm probably going to find out why the above XSLT wouldn't work :-)
--
<Matt/>
/|| ** Founder and CTO ** ** http://axkit.com/ **
//|| ** AxKit.com Ltd ** ** XML Application Serving **
// || ** http://axkit.org ** ** XSLT, XPathScript, XSP **
// \\| // ** mod_perl news and resources: http://take23.org **
\\//
//\\
// \\