xsl-list
[Top] [All Lists]

Re: efficient use of key element and function

2005-09-07 01:51:20
On 9/6/05, Manfred Staudinger <manfred(_dot_)staudinger(_at_)gmail(_dot_)com> 
wrote:
Hi all,
Given a rather long list of unique names I want to know for a
certain name if it is on that list. The stylesheet below does
this, but is this the best (most efficient) solution? In the most
common case around 95% of the names will be found.
- is the key element correct (I have no use for @use)?
- should I sort the names?

In the real stylesheet the names represent files and are used
to avoid a file-not-found for doc(). They are retrieved by means
of collection().

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:key name="find" match="*" use="."/>
<xsl:template match="/">
<xsl:variable name="Index-alt">
    <doc>
        <name>
            <xsl:text>schmid_hans</xsl:text>
        </name>
        <name>
            <xsl:text>prunauer_katharina</xsl:text>
        </name>
        <name>
            <xsl:text>senkenwald_wolfgang</xsl:text>
        </name>
    </doc>
</xsl:variable>
<xsl:value-of select="empty(key('find', 'prunauer_regina', $Index-alt))"/>
<xsl:value-of select="empty(key('find', 'strada_jacopo', $Index-alt))"/>
</xsl:template>
</xsl:stylesheet>

Not sure about your key definition:

* matches all elements
. gets all the descedant text nodes and concatenates them together

so

<name>schmid_hans</name>

and 

<doc><name>schmid_</name><name>hans</name></doc>

when keyed with 'schmid_hans' would both return an element, but is
probably not want you want.

If might be better to match on text() than on *

cheers
andrew

--~------------------------------------------------------------------
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>