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 |