Subject: [xsl] xslt key used with a predicate of an xpath expression From: "Tim Lebo" <timleboxslt@xxxxxxxxx> Date: Fri, 24 Mar 2006 18:29:11 -0500 |
Hello, Lines 20-22 of the following xsl script do not work as I'd hoped. A way to get what I'd hoped is on lines 25-28. Is the key used in 20-22 passed directly to 'xpath' before being evaluated by 'xslt'? Is there a way to accomplish this without creating an extra variable as in the solution on 25-28? I think it is too hard to explain the problem in English, so please excuse my terse canonical description. If you would like more of a description, please ask. Regards, Tim Lebo ======== XML input ========= <?xml version="1.0" encoding="UTF-8"?> <root> <object id="obj1" colorhex="#ffffff"> </object> <object id="obj2" colorhex="#000000"> </object> <object id="obj3" colorhex="#ffffff"> </object> <thing> <idref>obj1</idref> </thing> </root> ======== XSLT attempt ======== 1 <?xml version="1.0"?> 2 <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 3 <xsl:output method="text"/> 4 5 <xsl:variable name="colors"> 6 <color hex="#ffffff">White</color> 7 <color hex="#000000">Black</color> 8 </xsl:variable> 9 10 <xsl:key name="objects" match="object" use="@id"/> 11 12 <xsl:template match="/"> 13 <xsl:apply-templates select="root/thing"/> 14 </xsl:template> 15 16 <xsl:template match="thing"> 17 <xsl:value-of select="concat('This thing refers to object with @id ',idref,$NL)"/> 18 <xsl:value-of select="concat('The object with that id has @colorhex = ', 19 key('objects',idref)/@colorhex,$NL)"/> 20 <xsl:value-of select="concat('The @hex of that object means color ', 21 $colors/color[@hex=key('objects',idref)/@hex], 22 ' (THIS DOES NOT WORK BUT I WANT IT TO.)',$NL)"/> 23 24 <xsl:comment> The following accomplishes the desired output </xsl:comment> 25 <xsl:variable name="tempvar" select="key('objects',idref)/@colorhex"/> 26 <xsl:value-of select="concat('Value of undesireable variable is ',$tempvar,$NL)"/> 27 <xsl:value-of select="concat('The round-about way to get the color meaning is ', 28 $colors/color[@hex=$tempvar],$NL)"/> 29 </xsl:template> 30 31 <xsl:variable name="NL"> 32 <xsl:text> 33 </xsl:text> 34 </xsl:variable> 35 36 </xsl:transform> ======= XSLT without line numbers so you can run it yourself ====== <?xml version="1.0"?> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="text"/> <xsl:variable name="colors"> <color hex="#ffffff">White</color> <color hex="#000000">Black</color> </xsl:variable> <xsl:key name="objects" match="object" use="@id"/> <xsl:template match="/"> <xsl:apply-templates select="root/thing"/> </xsl:template> <xsl:template match="thing"> <xsl:value-of select="concat('This thing refers to object with @id ',idref,$NL)"/> <xsl:value-of select="concat('The object with that id has @colorhex = ', key('objects',idref)/@colorhex,$NL)"/> <xsl:value-of select="concat('The @hex of that object means color ', $colors/color[@hex=key('objects',idref)/@hex], ' (THIS DOES NOT WORK BUT I WANT IT TO.)',$NL)"/> <xsl:comment> The following accomplishes the desired output </xsl:comment> <xsl:variable name="tempvar" select="key('objects',idref)/@colorhex"/> <xsl:value-of select="concat('Value of undesireable variable is ',$tempvar,$NL)"/> <xsl:value-of select="concat('The round-about way to get the color meaning is ', $colors/color[@hex=$tempvar],$NL)"/> </xsl:template> <xsl:variable name="NL"> <xsl:text> </xsl:text> </xsl:variable> </xsl:transform>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] IE applies transformation, Fx, Manfred Staudinger | Thread | RE: [xsl] xslt key used with a pred, Michael Kay |
[xsl] IE applies transformation, Fx, Manfred Staudinger | Date | RE: [xsl] xslt key used with a pred, Michael Kay |
Month |