|
Subject: Re: [xsl] node depth From: Bernie <berniecc@xxxxxxxxx> Date: Fri, 7 Sep 2007 14:04:00 +0200 |
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, Abel Braaksma | Thread | Re: [xsl] node depth, Scott Trenda |
| [xsl] Fo:table keeps-with-next, Copley, Sarah | Date | Re: [xsl] In Search of People Who K, M. David Peterson |
| Month |