Re: [xsl] variable in xsl:template match

Subject: Re: [xsl] variable in xsl:template match
From: Abel Braaksma <abel.online@xxxxxxxxx>
Date: Thu, 26 Apr 2007 16:51:06 +0200
Garvin Riensche wrote:
Hello,

Im am wondering if it is possible to pass an xpath expression (or part of it) from the commandline to the match attribute of a template.

You'll need XSLT 2.0 to have a global variable or parameter in you match attribute.



What I am thinking about is something like to following. If I call the parser with


saxon target=position input.xml styleshee.xsl

And I have a template with something similar to

<xsl:template match="/root/$target/child">

I want the Xpath expression to be evaluated as "/root/position/child".

If you don't care about namespaces (but you should): <xsl:template match="/root/*[local-name() = $target]/child" >....

If you do care about namespaces, you can do:
<xsl:param name="target" as="xs:QName" select="xs:QName('ns:position') />

<xsl:template match="/root/*[local-name-from-QName($targer) = local-name() and namespace-uri-from-QName($target) = namespace-uri()]/child" >....


If you want to supply more than one level in the path, you should consider using FXSL (I believe it has some XPath parser). I also remember having seen some XPath parser for XSLT 2.0 on this list, but can't remember when.


Cheers,
-- Abel Braaksma

Current Thread