Subject: RE: [xsl] How to specify a path to a node in a nodeset using a variable From: "Shakeel Mahate" <shakeelmahate@xxxxxxxxxxx> Date: Fri, 9 Mar 2001 10:48:21 -0500 |
From: "Michael Kay" <mhkay@xxxxxxxxxxxx> >> <xsl:variable name="path" select="string(@name)"/> >> <xsl:value-of select="$container/$path"/> >Inventive, but it doesn't work. Variables can only hold values, they can't >hold expressions or parts of expressions. >Saxon (and I think several other products, now) has an evaluate() extension >function that will do this for you. xalan:evaluate($path) or saxon:evaluate($path) are indeed a way to acheive this but not completely. Since, I cannot change the current nodeset to which this evaluate() function is applied. If you recall I need to evaluate($path) to the $container nodeset. I cannot use xsl:call-template since it does not change the current nodeset. I cannot use xsl:apply-templates since I cannot write templates for the $container nodeset, since I have no preordained knowledge about the structure or the contents of $container. I do not want to write xsl:template match="." since it can be messy So, why is there no parameter in evaluate which takes in a nodeset and a string and then evaluates the string as an XPath expression on the nodeset. I know that the java class Extension.evaluate is passed a nodeset as the first argument by the XSLT processer, but it is the current nodeset. So the only solution that I could use was: <xsl:variable name="value"> <xsl:for-each select="$container[1]"> <xsl:value-of select="xalan:evaluate($path)"/> </xsl:for-each> </xsl:variable> Now this is a hack.... Somebody who reads my code will have a tough time figuring out that the <xsl:for-each...> is there simply to change the current nodeset. By specifying $container[1] I am reducing the number of iterations, is this true Mike? The code could have been more readable with this solution: <xsl:variable name="value" select="xalan:evaluate($container, $path)/> Another solution would be to change xsl:call-template to optionally change the nodeset if one is supplied <xsl:call-template name: "eval" apply-to: "$container"> <xsl:param name: "path">$path</xsl:param> </xsl:call-template> apply-to attribute of call-template is optional and it changes the current nodeset. Any suggestions.... Shakeel XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] How to specify a path to , Michael Kay | Thread | Re: [xsl] How to specify a path to , David Carlisle |
Re: [xsl] Copy attributes? ... poss, David Carlisle | Date | [xsl] Why do some people post via x, Robert Nicholson |
Month |