Subject: RE: [xsl] Keeping a map in my XSL From: "Nathan Young \(natyoung\)" <natyoung@xxxxxxxxx> Date: Tue, 13 Sep 2005 10:43:21 -0700 |
Hi. Kevin, I've done something like what you want to do using the document function and xpaths. I agree with Andrew's suggestion about not relying on document order to associate key/value pairs, but we have values that can contain elements so we use something more like: <map> <key name="1">value of name 1</key> <key name="7">value of name 7</key> </map> That's in a separate file from the xsl (say map.xml). Then in the xsl you can use: <xsl:variable name="map" select="document('map.xml')"/> To get then value for 1 you can use: <xsl:value-of select="$map//key[@name='1']/> Andrew would your xsl:key solution apply to this? If so how? ---->Nathan > -----Original Message----- > From: andrew welch [mailto:andrew.j.welch@xxxxxxxxx] > Sent: Tuesday, September 13, 2005 9:02 AM > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] Keeping a map in my XSL > > On 9/13/05, Kevin L. Cobb <kevin.cobb@xxxxxxxxxxxx> wrote: > > I want to be able to set a variable that is retreived from > my XML I am > > parsing to a mapped values. For example, lets say I have an > XML map that > > looks like this: > > > > <map> > > <key>12345</key><value>abcde</key> > > <key>78910</key><value>lmnop</value> > > </map> > > > > My source XML has the value '12345' in a certain field. I > retreive the > > field as usual in XSL and then I want to get the mapped > value of this > > field. The map above is "included" in my XSL. Is there a > best way to do > > this in XSL? > > yes, first restructure your map as associating a key and value by > position is a bad idea, much better to use attributes: > > <map> > <key name="12345" value="abcde"/> > <key name="78910" value="lmnop"/> > </map> > > then define a key to return a value for a given name: > > <xsl:key name="mappings" match="key" use="@name"/> > > then in xslt 1.0 use: > > <xsl:variable name="lookup" select="the_name_you_want_lookup"/> > <xsl:for-each select="$map"> > <xsl:value-of select="key('mappings', $lookup)/@value"/> > </xsl:for-each> > > in 2.0 you don't have the hassle of switching the context node because > key() can take it as the third argument: > > <xsl:value-of select="key('mappings', the_name_you_want_to_lookup, > $mappings)/@value"/> > > cheers > andrew
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Keeping a map in my XSL, andrew welch | Thread | Re: [xsl] Keeping a map in my XSL, andrew welch |
RE: [xsl] Good practice (CSS,XHTML), Nathan Young \(natyo | Date | RE: [xsl] Is it possible to modify , Agnisys Technology \ |
Month |