Re: [xsl] position() ne last()

Subject: Re: [xsl] position() ne last()
From: Vyacheslav Sedov <vyacheslav.sedov@xxxxxxxxx>
Date: Thu, 3 Dec 2009 17:49:25 +0300
<xsl:template match="para[following-sibling::para]">
       <br/><xsl:next-match/>
</xsl:template>

"P:QP0QP:P>QQQ - QP5QQQP0 QP0P;P0P=QP0" (Q) PP=QP>P=
PP0P2P;P>P2P8Q P'P5QP>P2

2009/12/3 Dimitre Novatchev <dnovatchev@xxxxxxxxx>:
> That's remarkable. Somehow it is similar to the prepend optimization I
> wrote about in my blog last December:
>
> B http://dnovatchev.spaces.live.com/Blog/cns!44B0A32C2CCF7488!981.entry
>
> Does a catalog of such optimizations exist?
>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> Never fight an inanimate object
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play
>
>
> On Thu, Dec 3, 2009 at 4:43 AM, Michael Kay <mike@xxxxxxxxxxxx> wrote:
>>
>> A little coding tip. I've no idea why this hasn't come up before. It's
very
>> common to write things like
>>
>> <xsl:for-each select="para">
>> B <xsl:apply-templates/>
>> B <xsl:if test="position() ne last()">
>> B  B  <br/>
>> B </xsl:if>
>> </xsl:for-each>
>>
>> But a much better way of coding this is:
>>
>> <xsl:for-each select="para">
>> B <xsl:if test="position() ne 1">
>> B  B  <br/>
>> B </xsl:if>
>> B <xsl:apply-templates/>
>> </xsl:for-each>
>>
>> Why? Because however hard the optimizer works, the last() function is hard
>> work: it involves some kind of lookahead. With "position() ne last()" the
>> lookahead might be limited to one element, but it's still a lot more
>> complicated than testing whether the position is 1.
>>
>> With streaming coming along, the latter formulation is also more likely to
>> be streamable (because lookahead is impossible with streaming).
>>
>> I might think about doing the above rewrite automatically...
>>
>>
>> Regards,
>>
>> Michael Kay
>> http://www.saxonica.com/
>> http://twitter.com/michaelhkay

Current Thread