|
Subject: RE: [xsl] Using parameter as regex in matches() function From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 29 May 2008 23:09:44 +0100 |
You want
matches(., concat('^', $criteria_name, '$'))
Incidentally, don't do this:
<xsl:with-param name="criteria_name">
<xsl:value-of select="."/>
</xsl:with-param>
when you mean this:
<xsl:with-param name="criteria_name" select="."/>
It's a very common blunder, and it gives XSLT an undeserved reputation for
verbosity and slowness. You're building an XML document containing a tree of
nodes, when all you want is to evaluate a string.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Dave.McGovern@xxxxxxxxxxx [mailto:Dave.McGovern@xxxxxxxxxxx]
> Sent: 29 May 2008 22:46
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Using parameter as regex in matches() function
>
> I am using XSLT 2.0 using the Altova XMLSpy 2008 built-in engine.
>
> I am trying to use an xsl:param parameter name as my regex within a
> matches() function.
>
> I am passing the parameter in via a call to a named template as shown
> here:
>
> ...
> <xsl:call-template name="assign_id">
> <xsl:with-param name="criteria_name"><xsl:value-of
> select="."/></xsl:with-param>
> </xsl:call-template>
> ...
>
> Here is the called template:
> ...
> <xsl:template name="assign_id">
> <xsl:param name="criteria_name">NULL</xsl:param>
> <xsl:attribute name="id"><xsl:value-of
> select="document('dictionary/subselectionCriteria.xml')//dt[ma
> tches(.,$c
> riteria_name)]/ancestor::dlentry/@id"/></xsl:attribute>
> <xsl:value-of select="."/>
> </xsl:template>
> ...
>
> With the problematic part being:
> //dt[matches(.,$criteria_name)]
>
> The problem is that I want to set boundaries for my regex
> using the ^ and $ meta-characters. As I am using it above,
> the matches() function is behaving more like contains().
>
> For example, if $criteria-name is set to "Reporting Group" on
> a particular iteration, I am getting matches on "Reporting
> Group", "From Reporting Group", "To Reporting Group",
> "Reporting Group Type", etc.
>
> I want to restrict this to only match on the exact "Reporting Group"
> string.
>
> I have tried various quoting and backslash-escaping constructs to no
> avail:
> //dt[matches(.,'^$criteria_name$')]
> //dt[matches(.,'^\$criteria_name$')]
> //dt[matches(.,'^{$criteria_name}$')]
>
> I think this may be because the same metacharacter '$' is
> used for both the param name and to set the end boundary of
> the regex, but I'm not sure why escaping it wouldn't work if
> this is the case?
>
> Any ideas?
> Thanks in advance,
> Dave
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Using parameter as regex in m, Dave.McGovern | Thread | RE: [xsl] Using parameter as regex , Houghton,Andrew |
| [xsl] Using parameter as regex in m, Dave.McGovern | Date | Re: [xsl] Using parameter as regex , David Carlisle |
| Month |