This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Testing by counting or positional predicate
Francis Norton wrote:
> David Carlisle wrote:
> >
> > > count($node1|$node2) = 1
> > >
> > > or:
> > >
> > > not(($node1|$node2)[2])
> >
> > or generate-id($node1)=generate-id($node1)
> >
> logically equivalent and certainly more readable, but on one stylesheet
> that I run (to de-dupe the output of an XML Spy conversion from XML
> Schema to XDR) the difference between Muenchian grouping with
> "count($node1|$node2) = 1" and one with "generate-id(node1) =
> generate-id(node2)" is 4.4 seconds v. 14.3 seconds!
Just for an opposing view point on this, on one stylesheet that I use
Muenchian grouping, I have a filter on the key "match". When I use the
"count" method, I have to use the filter again when selecting the nodes, but
when I use the "generate-id" method, I don't have to use the filter again.
In my case, the "generate-id" method is 2-3 times faster!
Example:
<xsl:key
name="key-texture"
match="Texture[0=count(preceding-sibling::Texture[1])]"
use="concat(@texture, ':', @u, ':', @v)" />
<xsl:variable
name="primary-textures"
select="//Texture[generate-id(.) = generate-id(key('key-texture',
concat(@texture, ':', @u, ':', @v))[1])]" />
is faster for me than:
<xsl:key
name="key-texture"
match="Texture[0=count(preceding-sibling::Texture[1])]"
use="concat(@texture, ':', @u, ':', @v)" />
<xsl:variable
name="primary-textures"
select="//Texture[0=count(preceding-sibling::Texture[1])][count(.|key('key-t
exture', concat(@texture, ':', @u, ':', @v))[1])]" />
-Daniel
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list