[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Bernie wrote:
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:
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:
Cheers,
Abel Braaksma
Re: [xsl] node depth
Subject: Re: [xsl] node depth From: Abel Braaksma <abel.online@xxxxxxxxx> Date: Fri, 07 Sep 2007 13:42:15 +0200 |
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 | Re: [xsl] node depth, Bernie |
RE: [xsl] Unable to use count funct, Yaswanth | Date | Re: [xsl] Unable to use count funct, Abel Braaksma |
Month |
Keywords