xsl-list
[Top] [All Lists]

Re: checking if an element starts-with a certain string using keys

2005-02-14 03:00:00
Jarno,

Thanks for the answer, it works partly. I forgot to tell that the code in the structure file can also be longer: for example:

<field>
   <code>PYTT/030/040</code>
   <element/>
</field>
<field>
   <code>PYTT/030/040/050</code>
   <element/>
</field>

There should be a longest match. So the following element should match the second field:
<org code="PYTT/030/040/050/060">

I think the expresion will be so complex that it will be quicker to do the xsl-for each statement.

Regards,

Harm


Jarno(_dot_)Elovirta(_at_)nokia(_dot_)com wrote:

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

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


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