|
Subject: RE: [xsl] a nicer total sibling count than this From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx> Date: Thu, 19 Sep 2002 15:33:35 +0100 |
> To my surprise and delight, the following worked, producing
> heavy def numbers with a following non-break space:
>
> <xsl:template match="def">
> <xsl:if test="(count(preceding-sibling::def) +
> count(following-sibling::def)) >= 1">
> <xsl:element name="strong">
> <xsl:number/>
> <xsl:text> </xsl:text>
> </xsl:element>
> </xsl:if>
> <xsl:apply-templates/>
> </xsl:template>
>
> Is there a prettier/more efficient way of doing the same
> thing without resorting to frankly ugly
> '(count(preceding-sibling::def)+count(following-sibling::def))'?
>
You've had a number of solutions to this, but there is another. Assuming
this template rule is processed by <xsl:apply-templates select="def"/>
or equivalent, you can write
<xsl:template match="def">
<xsl:if test="last()!=1">
<strong><xsl:value-of select="concat(position(),
Š)"/></strong>
</xsl:if>
<xsl:apply-templates/>
</xsl:template>
Using position() and last() will often be more efficient than using
count() and xsl:number, because they work on the current node list,
which you are using anyway to output the nodes.
Michael Kay
Software AG
home: Michael.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] a nicer total sibling cou, Jeni Tennison | Thread | Re: [xsl] a nicer total sibling cou, Stewart C. Russell |
| RE: [xsl] RE: XML/XSLT to HTML outp, Michael Kay | Date | RE: [xsl] Can you apply a template , Michael Kay |
| Month |