Subject: Re: [xsl] How to make tree menu from flat XML From: Radoslav Kolarov <roonex@xxxxxxxxx> Date: Sun, 23 Jul 2006 10:26:13 -0700 (PDT) |
Great!!! It works! Thanks for the help Mukul! :) --- Mukul Gandhi <gandhi.mukul@xxxxxxxxx> wrote: > You need to use the node-set extension function. > > Something like following: > > <xsl:stylesheet version="1.0" > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:msxsl="urn:schemas-microsoft-com:xslt"> > > <xsl:template match="/records"> > <xsl:variable name="rtf"> > <records> > <xsl:for-each select="record[parentkeynum = 0]"> > <record> > <xsl:variable name="key1" select="keynum" /> > <xsl:copy-of select="*" /> > <xsl:for-each select="../record[parentkeynum > = > $key1]"> > <record> > <xsl:variable name="key2" select="keynum" > /> > <xsl:copy-of select="*" /> > <xsl:for-each > select="../record[parentkeynum = $key2]"> > <record> > <xsl:copy-of select="*" /> > </record> > </xsl:for-each> > </record> > </xsl:for-each> > </record> > </xsl:for-each> > </records> > </xsl:variable> > > <xsl:call-template name="dve"> > <xsl:with-param name="nodeset" > select="msxsl:node-set($rtf)" /> > </xsl:call-template> > > </xsl:template> > > <xsl:template name="dve"> > <xsl:param name="nodeset" /> > <xsl:for-each select="$nodeset//records/record"> > <xsl:call-template name="SubMenu"> > <xsl:with-param > name="strCSS">ParentIsVisible</xsl:with-param> > </xsl:call-template> > </xsl:for-each> > </xsl:template> > > The rest of the code would probably remain same.. > > Regards, > Mukul > > http://gandhimukul.tripod.com > > On 7/23/06, Radoslav Kolarov <roonex@xxxxxxxxx> > wrote: > > Thanks Mukul, > > The levels are only 3 yes. But how to use > heirarchy > > XML made by template. This is what I trying: > > > > <?xml version="1.0" ?> > > <xsl:stylesheet version="1.0" > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <xsl:output method="xml" indent="yes"/> > > > > <xsl:template match="/records"> > > <records> > > <xsl:for-each select="record[parentkeynum = > 0]"> > > <record> > > <xsl:variable name="key1" select="keynum" > /> > > <xsl:copy-of select="*" /> > > <xsl:for-each > select="../record[parentkeynum = > > $key1]"> > > <record> > > <xsl:variable name="key2" > select="keynum" > > /> > > <xsl:copy-of select="*" /> > > <xsl:for-each > > select="../record[parentkeynum = $key2]"> > > <record> > > <xsl:copy-of select="*" /> > > </record> > > </xsl:for-each> > > </record> > > </xsl:for-each> > > </record> > > </xsl:for-each> > > </records> > > <xsl:call-template name="dve"> > > </xsl:call-template> > > > > </xsl:template> > > > > <xsl:template name="dve" match="/"> > > <xsl:for-each select="//records/record"> > > <xsl:call-template name="SubMenu"> > > <xsl:with-param name="strCSS">Parent > > IsVisible</xsl:with-param> > > </xsl:call-template> > > </xsl:for-each> > > </xsl:template> > > > > <xsl:template name="SubMenu"> > > <xsl:param name="strCSS" /> > > > > > > > > <div class="{$strCSS}"> > > <xsl:choose> > > <xsl:when test="count(record) > 0"> > > <!-- Element has children, it can be expanded > --> > > <input type="hidden" id="hidIsExpanded" > value="0" > > /> > > <label id="lblExpand" class="Expander" > > onclick="ExpanderClicked()">+</label> > > </xsl:when> > > <xsl:otherwise> > > <label class="Expander"></label> > > </xsl:otherwise> > > </xsl:choose> > > > > <a><xsl:value-of select="keyname" /></a> > > <xsl:for-each select="record"> > > <xsl:call-template name="SubMenu"> > > <xsl:with-param > > name="strCSS">NotVisible</xsl:with-param> > > </xsl:call-template> > > </xsl:for-each> > > </div> > > </xsl:template> > > > > </xsl:stylesheet> > > > > > > > > and than I use this ASP > > > > <%@ Language=VBScript %> > > <% option explicit %> > > <HTML> > > <HEAD> > > <link type="text/css" rel="stylesheet" > > href="alerts.css" /> > > </HEAD> > > <BODY> > > <b>Alerts</b> > > <% > > dim xmlMenu > > dim xslMenu > > > > 'Get the source XML > > set xmlMenu = > server.CreateObject("Microsoft.XMLDOM") > > xmlMenu.async = false > > xmlMenu.load server.MapPath("probe.xml") > > > > 'Get the XSLT to transform the XML > > set xslMenu = > server.CreateObject("Microsoft.XMLDOM") > > xslMenu.async = false > > xslMenu.load server.MapPath("probe.xsl") > > > > 'Transform the source XML using XSLT > > Response.Write > xmlMenu.transformNode(xslMenu) > > > > set xmlMenu = nothing > > set xslMenu = nothing > > %> > > > > <script language="jscript"> > > function ExpanderClicked() > > { > > //Get the element that was clicked > > var ctlExpander = event.srcElement; > > var ctlSelectedEntry = > ctlExpander.parentElement; > > //Get all the DIV elements that are direct > > descendants > > var colChild = > ctlSelectedEntry.children.tags("DIV"); > > if(colChild.length > 0) > > { > > var strCSS; > > //Get the hidden element that > indicates whether or > > not entry is expanded > > var ctlHidden = > === message truncated === __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to make tree menu fro, Mukul Gandhi | Thread | [xsl] How to make tree menu from fl, Radoslav Kolarov |
Re: [xsl] How to make tree menu fro, Mukul Gandhi | Date | [xsl] Convert an HTML DOM node to X, Lindsey Simon |
Month |