Subject: Re: [xsl] position() ne last() From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Thu, 3 Dec 2009 05:39:42 -0800 |
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@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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] position() ne last(), Michael Kay | Thread | Re: [xsl] position() ne last(), Vyacheslav Sedov |
Re: [xsl] Transform with Multiple F, David Carlisle | Date | RE: [xsl] Transform with Multiple F, Ramkumar |
Month |