RE: [xsl] Applying a transform to a tranform

Subject: RE: [xsl] Applying a transform to a tranform
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Tue, 9 Sep 2003 23:43:59 +0100
> 
> I have a situation where I would like apply a transform to 
> the transform of an xml document.  Is there a way to do this 
> in one xslt document?

Yes, if your processor offers the node-set extension. The pattern is:

<xsl:variable name="temp">
  <xsl:apply-templates select="/" mode="phase1"/>
</xsl:variable>

<xsl:template match="/">
  <xsl:apply-templates select="xx:node-set($temp)" mode="phase2"/>
</xsl:template>

(Of course either phase1 or phase2 can be replaced with the default
mode, or you can even run both phases in the same mode, but this needs
care.)

Michael Kay

> 
> For example the original xml looks like
> 
> <rowset>
>   <row>
>     <id>1</id>
>     <value>value 1</value>
>     <parent>0</parent>
>   </row>
>   <row>
>     <id>2</id>
>     <value>value 2</value>
>     <parent>1</parent>
>   </row>
>   <row>
>     <id>3</id>
>     <value>value 3</value>
>     <parent>0</parent>
>   </row>
> </rowset>
> 
> The first transform (which I have written and works) results in:
> 
> <tree>
>   <branch>
>      <id>1</id>
>      <value>value 1</value>
>      <branch>
>         <id>2</id>
>         <value>value 2</value>
>      </branch>
>   </branch>
>   <branch>
>     <id>3</id>
>     <value>value3</value>
>   </branch>
> </tree>
> 
> Now in the same xslt document I would like to transform this 
> into the html code to represent a "tree" control.  I have 
> written the transform document to do this and it works when 
> supplied with an xml document of the "tree/branch" type.  The 
> problem I am having is making the first transform happen on 
> the original document and then the second transform on the 
> first transform results.
> 
> I thought the following logic would work but it doesn't
> 
> <xsl:apply-templates select="rowset"/>  -- to transform into 
> tree like xml <xsl:apply-templates select="tree"/> -- to 
> transform into html tree control
> 
> It appears as though this is transforming the original doc in 
> both instances (i.e. the rowset template select doesn't 
> "pass" the results of its transform forward).
> 
> Is it possible to make the second transform use the results 
> of the first in the same doc?? Thanks in advance!
> 
> 
> 
> 
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread