Subject: Re: [xsl] node depth From: "Scott Trenda" <Scott.Trenda@xxxxxxxx> Date: Thu, 13 Sep 2007 12:15:50 -0500 |
Hey Bernie, I'm a little late to the response on this one - thought I'd put in my two cents. Remember that a variable can capture any output data that would usually be sent to the result document... including output from internal XSLT elements. You can get a good variety of count and depth combinations using the <xsl:number/> element; if you put <xsl:number/> in a <xsl:variable>, the string value of that number will be available for you to use in the rest of your template. ~ Scott Date: Fri, 7 Sep 2007 14:04:00 +0200 To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx From: Bernie <berniecc@xxxxxxxxx> Subject: Re: [xsl] node depth Message-ID: <271da0ec0709070504n2ecbcfadmd73ac9c7314aef7e@xxxxxxxxxxxxxx> Thanx Abel, I'm a XSL newbie learning. On 9/7/07, Abel Braaksma <abel.online@xxxxxxxxx> wrote: > Bernie wrote: > > Is there any way to find out the depth of the current element in a > > recursive template? The XML is the following: > > > > The depth of any node in the current tree can be requested with: > count(ancestor-or-self::*) > > Bonus: your stylesheet can be written a bit easier as follows: > > <xsl:template match="section"> > <li> > <xsl:apply-templates select="label" /> > </li> > <ul> > <xsl:apply-templates select="section" /> > </ul> > </xsl:template> > > <xsl:template match="label"> > <xsl:apply-templates select="@href[@href != '']" /> > <xsl:value-of select=".[not(@href) | normalize-space(@href) = '']" /> > </xsl:template> > > <xsl:template match="label/@href"> > <a href="{.}"><xsl:value-of select="label" /></a> > </xsl:template> > > > > As a general hint, whenever you are writing an xsl:choose or an xsl:if > with a node test, consider rewriting it as a matching template/applying > templates pair. This will undoubtedly make your code more adept to > change, efficient and easier to understand in the long run. A test for a > label being empty and then outputting its value is unnecessary. It may > happen that an empty <a></a> occurs but that still renders the same, if > you don't like that you can remove it by changing the matching template to: > > <xsl:template match="label[.!='']/@href"> > <a href="{.}"><xsl:value-of select="label" /></a> > </xsl:template> > > Cheers, > > Abel Braaksma > > > > > > > <xsl:template match="section"> > > <xsl:if test="label!=''"> > > <li> > > <xsl:choose> > > <xsl:when test="label/@href!=''"> > > <a> > > <xsl:attribute name="href"> > > <xsl:value-of select="label/@href" /> > > </xsl:attribute> > > <xsl:value-of select="label" /> > > </a> > > </xsl:when> > > <xsl:otherwise> > > <xsl:value-of select="label" /> > > </xsl:otherwise> > > </xsl:choose> > > </li> > > <ul> > > <xsl:apply-templates select="section" /> > > </ul> > > </xsl:if> > > </xsl:template> > > ----------------------------- > > > > Bernie.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] node depth, Bernie | Thread | [xsl] Unable to use count function , Yaswanth |
Re: [xsl] RE: Smart Quote Encoding, David Carlisle | Date | [xsl] [XSL] XSL Browser Integration, Alain |
Month |