This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: FW: Recursion over a tree
- From: "Joerg Heinicke" <joerg dot heinicke at gmx dot de>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Wed, 10 Apr 2002 22:36:05 +0200
- Subject: Re: [xsl] FW: Recursion over a tree
- References: <GOEKIGMLJCKHEPFNDLKAKENNCBAA.geoffb@deerfield.com>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hello Geoff,
it's much easier you think. You only must process the nodes in document
order and for each ancestor a node has you must add a indent string:
<xsl:template match="*">
<xsl:for-each select="ancestor::*">
<xsl:text> </xsl:text>
</xsl:for-each>
<xsl:value-of select="name()"/>
<xsl:text> </xsl:text>
<xsl:apply-templates select="*"/>
</xsl:template>
Or in HTML:
<xsl:template match="*">
<div style="padding-left: 10px;">
<xsl:value-of select="name()"/>
<xsl:apply-templates select="*"/>
</div>
</xsl:template>
Regards,
Joerg
> Hi,
> I've been messing around in the magical world of XSL recently, and I'm a
bit
> new, so bear with me.
> One thing I need to do is loop over a structure, which can contain any
> number of nodes, and any number of levels. The names of the nodes can be
> different (very important), so my script needs to be modular.
>
> Take the following structure (purely an example):
>
> <object>
> <object>
> <object></object>
> </object>
> <object>
> <object>
> <object></object>
> </object>
> </object>
> </object>
>
> I need to create a tree type structure based on the above structure:
> object
> object
> object
> object
> object
>
> So... how? I've got the following code, which is meant to be
> recursive. It is a bit hack... I'm missing something here.
>
> <xsl:template match="\">
> <xsl:call-template name="recursive-child">
> <xsl:with-param name="thisPath"
> select="following-sibling::*"/>
> </xsl:call-template>
> </xsl:template>
>
> <xsl:template name="recursive-child">
> <xsl:for-each select="thisPath">
> <div align="" style="padding-left:
> 10px;">
> <!-- iterate over children -->
> <xsl:value-of select="name
> ()"/>
> </div>
> <xsl:call-template name="recursive-
> child">
> <xsl:with-param
> name="thisPath" select="following-sibling::*"/>
> </xsl:call-template>
> </xsl:for-each>
> </xsl:template>
>
>
> Anyway. Any help would be appreaciated!
>
> Geoff B
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list