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

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Application Design



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  **
     \\//
     //\\
    //  \\