Subject: Re: [xsl] Lookup tables|
From: "Joe Fawcett" <joefawcett@xxxxxxxxxxx>
Date: Fri, 16 Mar 2007 01:46:25 -0000
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:key name="getKeyByName" match="Keys/Key" use="@name" />
<xsl:template match="/"> <example> <xsl:copy-of select="key('getKeyByName', A/B/C/Referrer/@ref)" /> </example> </xsl:template>
Joe Fawcett http://joe.fawcett.name
Joe Fawcett wrote:Kamal BhattI tried to use a key, but couldn't get it to "go backwards". Maybe I am using it incorrectly
I would have thought that you could use data embedded in the XML, but access via a key. This is declared using xsl:key in the XSLT and retrieved using the key function, see http://www.w3schools.com/xsl/func_key.asp.Another possibility is to embed the data in the XSLT, via an include maybe, and access via document(''). The disadvantage of this is that document(''), which points to the stylesheet itself, does not always work "out of the box", for example if the XSLT has been fetched from a database table. In that case they are things you can do to make it work, a custom XmlResolver in .NET and the same, I think, in Java.The lookup table is part of the XML, with the key embedded in a child eg:
<A> <Keys> <Key value="abc123" name="key1"/> <Key value="abc432" name="key2"/> </Keys> <B> <C> <Referrer ref="key1"/> </C> </B </A>
If someone can give me an example where you match Referrer and get the value from Key (without using ancestor or '..' syntax), that would be great.
Joe Fawcett (MVP - XML) http://joe.fawcett.name
----- Original Message ----- From: "Kamal Bhatt" <kbhatt@xxxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Friday, March 16, 2007 1:09 AM Subject: [xsl] Lookup tables
My company is designing XML specifically for XSLT processing. A question that has come up is the use of lookup tables. We have a lot of repeated data, and our system architect would like that data put in a "lookup table" at the top of the XML. By lookup table I mean XML with some key that can be identified. The only way I can think of processing this XML in XSLT 1.0 (without a lot of '..') is to use something like
ancestor::node()//LookUp/Parameter[@key = 'key_to_lookup'].
First question, is there another way of doing this, secondly, in XSLT parsers, particular those that use SAX, is there a major performance hit in using this method over having the data repeated.
Personally, I would prefer avoiding ancestor::node() and I would definitely like to avoid //.
-- Kamal Bhatt
-- Kamal Bhatt