Subject: Re: [xsl] How can one get the name of a template or function? From: Philip Fearon <pgfearo@xxxxxxxxxxxxxx> Date: Tue, 12 Mar 2013 21:27:31 +0000 |
A crude approach for collecting data on invoked templates, is to use a 'meta' XSLT stylesheet that modifies the XSLT you're interested in collecting data on. This could insert xsl:message instructions in each target template. You then just need to use this modified stylesheet on sample data. The XSLT might look something like this (this version not tested): <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:pxsl="http://qutoric.com/proxy-for-xsl"> <xsl:namespace-alias stylesheet-prefix="pxsl" result-prefix="xsl"/> <xsl:output method="xml" indent="no"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="xsl:template"> <xsl:choose> <xsl:when test="empty(*)"> <xsl:copy-of select="."/> </xsl:when> <xsl:otherwise> <xsl:copy> <xsl:apply-templates select="@*| xsl:param"/> <xsl:apply-templates select="node() except xsl:param"/> <xsl:variable name="msg" as="xs:string*"> <xsl:for-each select="@*"> <xsl:if test="name(.) = ('match','mode','name')"> <xsl:value-of select="concat(' ', name(.),': ',.)"/> </xsl:if> </xsl:for-each> </xsl:variable> <xsl:text> </xsl:text> <pxsl:message>Template-Signature: <xsl:value-of select="msg"/></pxsl:message> <xsl:text> </xsl:text> </xsl:copy> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> ------------- Phil Fearon On Fri, Mar 1, 2013 at 3:50 AM, John Laurence Poole <jlpoole56@xxxxxxxxx> wrote: > I'm resurrecting an old 2009 topic regarding > getting the name of a template. > > I followed Michael's suggestion below and have > successfully written an extension function that > produces the names of the template in instances > where the template is invoke through the > xsl:call-template mechanism. > > I'd be happy to provide a how-to on how I accomplished this along with > demonstration files if someone would like them; I suspect this is a > very esoteric area and there would not be any takers on my offer. > > What I would like to have is the ability to get > the name of a template in instances where the > template is invoked via the match mechanism: > xsl:apply-templates. This would be for instances where > the template has a name attribute, e.g. name="template_ABC". I tried > invoking my function similar to that below in a match situation and > null was returned despite the fact that the template that matched had > a name attribute. > > Any suggestions on how to approach this? I'm new to studying the > internals of Saxon, but believe there must be some place where > information about the templates is stored to be accessed by the parser > for the match facility and that extending the properties of the > storage model to include a name attribute in instances where a > template does have a name attribute would be the way toapproach this. > Maybe I'm barking up the wrong tree and the matching mechanism is not > what I'm imagining? > > Thanks, > > John Poole > > > here's the message I'm following up on: > > On 2009-02-11 11:57:49 Michael Kay posted to this list: > > 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/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Determining the type of i, Wendell Piez | Thread | Re: [xsl] How can one get the name , John Lumley |
Re: [xsl] Determining the type of i, Wendell Piez | Date | Re: [xsl] How can one get the name , John Lumley |
Month |