RE: [xsl] checking if an element starts-with a certain string using keys

Subject: RE: [xsl] checking if an element starts-with a certain string using keys
From: <Jarno.Elovirta@xxxxxxxxx>
Date: Mon, 14 Feb 2005 11:08:24 +0200
Hi,

> I got a problem with defining my keys right. I got a separate
> XML file
> where I want to lookup things according to a code. The XML structure
> file looks as follows:
>
> <fields>
>     <field>
>        <code>PYTT/010</code>
>        <element>foo</element>
>        <element>bar</element>
>     </field>
>     <field>
>        <code>PYTT/020</code>
>        <element>bar</element>
>     </field>
> </fields>
>
> In the main XML file the codes contain more numbers for example:
> <org code="PYTT/010/030/040"/>
>
> I want to access the first file using keys. I already managed
> to access
> using a for-each and this works fine but too slow.

Define key

<xsl:key name="field" match="field" use="code"/>

> The code looks like this:
> <xsl:variable name="code" select="@code"/>
>     <xsl:for-each select="document($structure-doc)">
>         <xsl:for-each select="fields/field[starts-with($code,
> code)] ">

Here use

<xsl:for-each select="key('field', substring($code, 0, 9))">

or

<xsl:for-each select="key('field', concat(substring-before($code, '/'), '/',
substring-before(substring-after($code, '/'), '/')))">

I.e. you can't use starts-with, you use the equality operator for key
lookups.


Cheers,

Jarno - Madam Zu: August 2003 Part 2

Current Thread