Re: [xsl] There must be a better way

Subject: Re: [xsl] There must be a better way
From: "Thomas B. Passin" <tpassin@xxxxxxxxxxxx>
Date: Fri, 5 Oct 2001 10:09:39 -0400
If you want "efficiency", then you should not compute anything that can be
pre-computed.  So you shouldn't use //CHAPTER[last()] over and over again.
Make it a variable.  It's especially worth doing because "//" tends to be
slow, especially with some processors.

Then you could create a key that returns the chapter when you give it a part
number, and use that key in any tests.  This way you could avoid using
//CHAPTER[number($partNo)] repeatedly.

Next you could make a template that tests whether a chapter is the last
chapter and call that template when you want to find out.  That way, any
improvements you think up would be easier to incorporate.  You could put the
xsl:if test in that template, making the main line of the code cleaner and
easier to follow.

Then, you don't need

<xsl:text>.html</xsl:text>

You can just use .html

On the other hand, if the code executes fast enough already, you could just
leave it alone...

Cheers,

Tom P

[Nicholas Waltham]

>  I am trying to build a set of links (outputting to HTML) based on what
> chapter a named template is called from.
> I have come up with this:
>
> <xsl:template name="TopLinks">
> <a href="{$prefix}.html"><img src="toc.gif" alt="Table of Contents"
> border="0"/></a>
> <xsl:variable name="partNo"><xsl:number level="single"
> count="CHAPTER"/></xsl:variable>
> <xsl:variable name="prev" ><xsl:value-of select="$prefix"/><xsl:value-of
> select="number($partNo)-1"/><xsl:text>.html</xsl:text></xsl:variable>
> <xsl:variable name="next" ><xsl:value-of select="$prefix"/><xsl:value-of
> select="number($partNo)+1"/><xsl:text>.html</xsl:text></xsl:variable>
> <xsl:if test="number($partNo)>1">
> <a href="{$prev}"><img src="back.GIF" alt="Previous" border="0"/></a>
> </xsl:if>
> <xsl:if test="not(//CHAPTER[number($partNo)]=//CHAPTER[last()])">
> <a href="{$next}"><img src="next.GIF" alt="Next" border="0"/></a>
> </xsl:if>
> </xsl:template>
>
>
> It does work, however, it strikes me that it is not really very efficient.
> Particularly the bottom piece for detecting if I
> am in the last chapter. Could anyway offer me suggestions on how I could
> improve this. $prefix is a parameter, and
> the named template is called from another template which  matches any
> <CHAPTER> element.
>



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread