xsl-list
[Top] [All Lists]

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

2009-12-03 09:50:02
<xsl:template match="para[following-sibling::para]">
       <br/><xsl:next-match/>
</xsl:template>

"краткость - сестра таланта" (с) Антон Павлович Чехов

2009/12/3 Dimitre Novatchev <dnovatchev(_at_)gmail(_dot_)com>:
That's remarkable. Somehow it is similar to the prepend optimization I
wrote about in my blog last December:

 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(_at_)saxonica(_dot_)com> 
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">
 <xsl:apply-templates/>
 <xsl:if test="position() ne last()">
    <br/>
 </xsl:if>
</xsl:for-each>

But a much better way of coding this is:

<xsl:for-each select="para">
 <xsl:if test="position() ne 1">
    <br/>
 </xsl:if>
 <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


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>