Subject: Re: [xsl] Can a named template return a node list? From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Fri, 17 Jun 2005 06:18:43 +1000 |
> <xsl:variable name="somenode" select="msxsl:node-set( $somedata )" /> > <xsl:value-of select="$somenode/@attr" /> You are trying to get the value of an attribute of the document node of a temporary tree. A document nodes (root nodes in XSLT 1.0 terminology) doesn't have attributes as it is not an element node. Probably you meant: <xsl:value-of select="$somenode/*/@attr" /> Cheers, Dimitre Novatchev On 6/17/05, John <john-xsl-list@xxxxxxxx> wrote: > Thanks. I want to use a named template to avoid putting certain XPath > statements in multiple locations. Maybe there is a better way. > > Since I don't think there is a pure XSL solution I have been trying with > node-set, but that's not working for me either. This seems to give no > output; I am pretty sure the solution is something obvious but I don't > see it. > > <?xml version="1.0" encoding="ISO-8859-1"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:msxsl="urn:schemas-microsoft-com:xslt"> > > <xsl:template match="*"> > <xsl:variable name="somedata"> > <xsl:call-template name="sometemplate" /> > </xsl:variable> > <xsl:variable name="somenode" select="msxsl:node-set( $somedata )" /> > <xsl:value-of select="$somenode/@attr" /> > </xsl:template> > > <xsl:template name="sometemplate"> > <xsl:copy-of select="/root/node1" /> > </xsl:template> > > </xsl:stylesheet> > > And the sample data again: > > <root> > <node1 attr="node1attrval"> > <node1a>node1atext</node1a> > </node1> > <node2 attr="node1attrval"> > <node2a>node2atext</node2a> > </node2> > </root> > > David Carlisle wrote: > > <xsl:variable name="somenode"> > > .... > > > > xsl:variable with content and no select attribute always (in xslt1) > > generates a result tree fragment not a node set. Therefor you can not > > query into the variable using XPath (or anything else) You can only copy > > it to the result, using copy-of or use it as a string. > > > > > > > >>and I am hoping to stay away from XSL extensions if possible. > > > > > > It's hard to avoid xx:node-set() (which is designed exactly to get round > > this problem) Most systems have a node-set() extension function (with > > mozilla's transformiix engine being the main exception) > > > > Of course if your templates are not actually creating any new nodes (as > > in your example) then you have an easy solution: just use xsl:variable > > with select as in > > > > <xsl:template match="*"> > > <xsl:variable name="somenode"select="/root/node1" /> > > <xsl:value-of select="$somenode/@attr" /> > > </xsl:template> > > > > David
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Can a named template retu, John | Thread | Re: [xsl] Can a named template retu, John |
[xsl] Mozilla XSLT Error codes, Brian King | Date | Re: [xsl] Can a named template retu, John |
Month |