Niket,

here you are...

SITEMAP.XMAP (fragment)
<map:pipeline>
        <map:match pattern="hash.xml">
                <map:generate src="documents/hashtable.xml"/>
                <map:transform src="stylesheets/hashtable.xsl"/>
                <map:serialize type="xml"/>
        </map:match>
</map:pipeline>

HASHTABLE.XML
<?xml version="1.0"?>
<page>
        <entry id="1"  parentid="0"/>
        <entry id="2"  parentid="0"/>
        <entry id="3"  parentid="0"/>
        <entry id="4"  parentid="0"/>
        <entry id="5"  parentid="1"/>
        <entry id="6"  parentid="1"/>
        <entry id="7"  parentid="6"/>
        <entry id="8"  parentid="7"/>
        <entry id="11" parentid="5"/>
        <entry id="9"  parentid="2"/>
        <entry id="10" parentid="2"/>
        <entry id="12" parentid="5"/>
</page>

HASHTABLE.XSL
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">

        <xsl:template match="page">

                <!-- Starts the tree -->
                <xsl:element name="tree">

                        <xsl:apply-templates/>

                </xsl:element>

        </xsl:template>

        <!-- Selects main branches -->
        <xsl:template match="//entry[@parentid=0]">

                <xsl:call-template name="process-branch">
                        <xsl:with-param name="id"><xsl:value-of 
select="@id"/></xsl:with-param>
                        <xsl:with-param name="parentid"><xsl:value-of
select="@parentid"/></xsl:with-param>
                </xsl:call-template>

        </xsl:template>

        <!-- Recursive function -->
        <xsl:template name="process-branch">
                <xsl:param name="id"/>
                <xsl:param name="parentid"/>

                <xsl:choose>

                        <!-- If element has no branches (i.e. is a leaf) -->
                        <xsl:when test="count(//entry[@parentid=current()/@id])=0">

                                <!-- Writes the "leaf" element -->
                                <xsl:element name="leaf">
                                        <xsl:attribute name="id"><xsl:value-of 
select="$id"/></xsl:attribute>
                                </xsl:element>

                    </xsl:when>

                        <!-- If element has branches -->
                    <xsl:otherwise>

                                <!-- Starts a "branch" element -->
                                <xsl:element name="branch">
                                        <xsl:attribute name="id"><xsl:value-of 
select="$id"/></xsl:attribute>

                                        <!-- For every branches of current branch -->
                                        <xsl:for-each 
select="//entry[@parentid=current()/@id]">

                                                <!-- Recurse the branch processing -->
                                                <xsl:call-template 
name="process-branch">
                                                        <xsl:with-param 
name="id"><xsl:value-of
select="@id"/></xsl:with-param>
                                                        <xsl:with-param 
name="parentid"><xsl:value-of
select="@parentid"/></xsl:with-param>
                                                </xsl:call-template>

                                        </xsl:for-each>

                                </xsl:element>

                    </xsl:otherwise>

                </xsl:choose>

        </xsl:template>

</xsl:stylesheet>

Best regards,

---------------------------------------------
               Luca Morandini
               GIS Consultant
              [EMAIL PROTECTED]
http://utenti.tripod.it/lmorandini/index.html
---------------------------------------------

-----Original Message-----
From: Niket Anand [mailto:[EMAIL PROTECTED]]
Sent: Friday, April 12, 2002 5:13 PM
To: Niket Anand
Subject: making tree like structure using XML,XSP,XSL


Hi All,
I have one function that connect to database and retrive data in form of
Hashtable.
My Hashtable may be like this.
MsgID         ParentID
1                    0
2                    0
3                    0
4                    0
5                    1
6                    1
7                    6
8                    7
9                    2
10                  2
11                  5
12                  5

Tree structure would be like this based on MsgID and ParentID
MsgID will be the Id of a tag and parentid is the id of the parent with
which it is linked.
1(parent0)
|
|
-------5(child of 1)
        |
        |___11(child of 5)
        |
        |____12(child of 5 and sibling of 11)
____6(child of 1 and sibling of 5)
        |
        |____7(child of 6)
                |
                |___8(child of 7)
2(parent 2)
|
|____9(child of 2)
|
|____10(child of 2)

3(parent 3)

4(parent 4)
Like this I have to show dynamic tree like structure in HTML form.I am using
cocoon2.0
This can be either handled by XSP or XSL or both.
Please suggest me how to solve the recursive loop problem using XSL..
How can I apply logic to have dynamic tree structure building function based
on the values of Hashtable keys and values.
Pls suggest  ideas.
Thanks,
Niket


---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faqs.html>

To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>

Reply via email to