The answer to performance questions is always to measure it and see. You
won't necessarily get the same results from two different processors.
I would expect id() and key() to give similar performance, but if the
attribute is an ID then there's no point also defining it as a key, that
would just give you two indexes; a processor won't normally build an
index for a key unless you actually use it, but this may or may not be
true for IDs.
If your task is to load the document from disk and extract a single
element, then an index isn't going to help you much because the cost of
building it outweighs the benefit it gives you. You might as well use a
straight predicate, such as //p[(_at_)id='xyz'].
Michael Kay
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
James Cummings
Sent: 03 July 2003 10:41
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] efficiency with id()
Ok, let's say you have a file of:
-----
<?xml version="1.0"?>
<foo>
<bar>
<blort>
<p id="c1001"><body wit="A B C">This is a
<app><rdg wit="A B">test</rdg><rdg
wit="C">really big test</rdg></app>
but only a test!</body></p>
<p id="c1002"><body wit="A B C">This is a
<app><rdg wit="A B">test</rdg><rdg
wit="C">really big test</rdg></app>
but only a test!</body></p>
<p id="c1003"><body wit="A B C">This is a
<app><rdg wit="A B">test</rdg><rdg
wit="C">really big <add> place="supra">test</add></rdg></app>
but only a test!</body></p>
...
<p id="c9205"><body wit="A B C">This is a
<app><rdg wit="A B">test</rdg><rdg
wit="C">really <gap/>test</rdg></app>
but only a test!</body></p>
</blort>
</bar>
</foo>
-----
What is the most efficient/quickest way of grabing a copy-of
a particular <p> (and
children) by its @id?
Is it best to do something like:
-----
<xsl:template match="/">
<xsl:copy-of select="id($id)"/>
</xsl:template
<!-- and another empty template matching anything you don't
want to display -->
-----
or is there a quicker way? Is key() quicker? The @id is in
reality declared as type ID, so seems reasonable to use that.
(This is for a quite large (well 2.5meg), file, which
admittedly would probably be better just burst out into
seperate files for each <p> element in this example.) Any
suggestions appreciated.
-James
---
Dr James Cummings, James(_dot_)Cummings(_at_)uea(_dot_)ac(_dot_)uk,
http://www.uea.ac.uk/~q503 Cursus Project, > School of Music,
University of East Anglia, Norwich, Norfolk, NR4 7TJ, UK
Tel:(01603)593-595
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list