Subject: [xsl] Iterate through tree structure From: jim mcgovern <jim.mcgovern2@xxxxxxxxxxxxxx> Date: Tue, 31 Mar 2009 16:28:34 +0100 |
Hi there Apologies for the duplicate post but I sent this through hotmail earlier and it stripped the content. Hopefully this will be more successful... Hopefully someone can help me with something that I thought was going to be straight forward but has been giving me a few problems! I'm trying to generate navigation from an xml file which is pretty much as below:- <dir name="dir1" id="x1"> <page pname = "page1"></page> <dir name="dir2" id="x2"> <page pname = "page2"></page> <dir name="dir3" id="x3"> <page pname = "page3"></page> </dir> <dir name="dir4" id="x4"> <page pname = "page4"></page> <dir name="dir5" id="x5"> <page pname = "page5"></page> <page pname = "page6"></page> <dir name="dir6" id="x6"> <page pname = "page6"></page> </dir> </dir> </dir> </dir> </dir> The above is a snapshot as it can go down "n" levels. If I'm at page6 then my navigation needs to be:- <ul> <li>dir1</li> <li>dir2</li> <li>dir4</li> </ul> <ul> <li>dir5</li> <li>dir6</li> </ul> What I'm having difficulty with is how to close the opening ul and open a new ul when I'm a directory up from the directory level I'm actully on. A stripped down but working version of What I'm trying is:- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" method="html" indent="yes" version="4.0"/> <xsl:param name="directoryID" ></xsl:param> <xsl:template match="/dir"> <xsl:call-template name="navigation"></xsl:call-template> </xsl:template> <xsl:template name="navigation"> <xsl:element name="ul"> <xsl:call-template name="nav"></xsl:call-template> </xsl:element> </xsl:template> <xsl:template name="nav"> <xsl:if test="(descendant-or-self::*[@dirID = $directoryID])"> <xsl:for-each select="./dir"> <xsl:if test="(descendant-or-self::*[@dirID = $directoryID])"> <xsl:element name="li"> <xsl:value-of select="@name"/> </xsl:element> <!-- recurse --> <xsl:call-template name="nav"></xsl:call-template> </xsl:if> </xsl:for-each> </xsl:if> </xsl:template> </xsl:stylesheet> Can anyone advise me on how to achieve the formatting where I have 2 sets of ULs? Any pointers much appreciated. Thanks Jim
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Re: encoding error when u, Michael Ludwig | Thread | RE: [xsl] Iterate through tree stru, Emmanuel Bégué |
Re: [xsl] AltovaXML and fragment id, David Carlisle | Date | RE: [xsl] Iterate through tree stru, Emmanuel Bégué |
Month |