[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[xsl] Re: Finding the maximum depth from a node
Subject: [xsl] Re: Finding the maximum depth from a node From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Fri, 10 May 2002 13:11:20 -0700 (PDT) |
"Dave Townsend" <dave at brass-bullet dot co dot uk> wrote: > Ok, I have basically almost a file structure in an xml document, > something like this: > > <root> > <folder name="1"> > <folder name="2"/> > <folder name="3"> > <folder name="4"/> > </folder> > <folder name="5"> > <folder name="6"> > <folder name="7"> > <folder name="8"/> > </folder> > </folder> > </folder> > </root> This is not well-formed xml -- I had to touch it a little. > I need to be able to find out how deep the nodes go, i.e. when the > template has matched root, I need to work out how deep the deepest > folder is (folder 8 in this case). I know how to calculate a depth > from a nodes context, but not the depth of its children. > > Anybody got any ideas. I'm quite new to XSL so chances are I've missed > something obvious, but I have searched the faq and the list archive > and found nothing helpful. Here's a very simple solution -- use FXSL and its maximum() function/template. Pass to it the list of "folder" nodes and a reference to your comparison function, which will return 1 if the "name" attribute of the first argument is bigger than the name attribute of the second argument. Here's the complete code: corrected xml document: ---------------------- <root> <folder name="1"> <folder name="2"/> <folder name="3"> <folder name="4"/> </folder> </folder> <folder name="5"> <folder name="6"> <folder name="7"> <folder name="8"/> </folder> </folder> </folder> </root> stylesheet: ---------- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:myDepthCompare="f:myDepthCompare" exclude-result-prefixes="xsl myDepthCompare" > <xsl:import href="maximum.xsl"/> <myDepthCompare:myDepthCompare/> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="/"> <xsl:variable name="vFunCompDepth" select="document('')/*/myDepthCompare:*[1]"/> <xsl:call-template name="maximum"> <xsl:with-param name="pList" select="//folder"/> <xsl:with-param name="pCMPFun" select="$vFunCompDepth"/> </xsl:call-template> </xsl:template> <xsl:template match="myDepthCompare:*"> <xsl:param name="arg1" select="/.."/> <xsl:param name="arg2" select="/.."/> <xsl:if test="$arg1/@name > $arg2/@name">1</xsl:if> </xsl:template> </xsl:stylesheet> Result: ------ <folder name="8" /> Cheers, Dimitre Novatchev. __________________________________________________ Do You Yahoo!? Yahoo! Shopping - Mother's Day is May 12th! http://shopping.yahoo.com XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Recall: [xsl] Xalan Rounding, Nik Krimm | Thread | Re: [xsl] Re: Finding the maximum d, Greg Faron |
Recall: [xsl] Xalan Rounding, Nik Krimm | Date | RE: [xsl] Xalan Rounding, Nik Krimm |
Month |