Subject: RE: [xsl] How can one get the name of a template or function? From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 11 Feb 2009 16:57:23 -0000 |
If you're prepared to grovel around the depths of Saxon internals, you can write an extension function public static String getTemplateName(net.sf.saxon.expr XPathContext context) { try { return context.getOrigin().getObjectName().getDisplayName(); } catch (Exception err) { return null; } } and call it without any arguments as xx:getTemplateName(). Not tested. It will only give the template name if it was invoked using call-template. Should probably work for function calls as well. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Houghton,Andrew [mailto:houghtoa@xxxxxxxx] > Sent: 11 February 2009 16:21 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] How can one get the name of a template or function? > > I'm using Saxon as an XSL transform processor. So I don't > mind whether the answer is specific to Saxon or is general to > all XSL transform processors. What I would like to do is to > get the name of the current template or function that is > currently executing. I realize that templates don't need to > be named, but in my case they will be named since I'm using > xsl:call-template on them. So for example I would like to do > something like: > > <xsl:template name="foo" as="item()*"> > <xsl:variable name="my-name" as="xsd:string" > select="get-name()" /> </xsl:template> > > <xsl:function name="bar" as="item()*"> > <xsl:variable name="my-name" as="xsd:string" > select="get-name()" /> </xsl:function> > > Where get-name() is some sort of function that will give me > the name of the template or function. I don't really care if > it's a function or a template that I have to call to get this > information. When looking over the list of XPath function I > don't see anything useful and I didn't see anything in > Saxon's extensions. So my question is can this be done somehow? > > BTW, I realize that I could do: > > <xsl:template name="foo" as="item()*"> > <xsl:variable name="my-name" as="xsd:string" > select="string('foo')" /> </xsl:template> > > <xsl:function name="bar" as="item()*"> > <xsl:variable name="my-name" as="xsd:string" > select="string('bar')" /> </xsl:function> > > but I would prefer not to do that since when the name > attribute changes, I need to keep the variable in sync too. > > > Thanks, Andy.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How can one get the name , David Carlisle | Thread | Re: [xsl] most efficient way to get, Robert Koberg |
Re: [xsl] How can one get the name , David Carlisle | Date | Re: [xsl] Problem with "except" ope, Wendell Piez |
Month |