[xsl] Re: Escaping quotes in XPath expressions

Subject: [xsl] Re: Escaping quotes in XPath expressions
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Sat, 15 Nov 2003 14:53:06 +0100
> Can anyone please tell me how I can escape a single-quote in an XPath
expression
> such as the one below?
>
> <xsl:value-of select="translate(normalize-space(.), 'x', 'y')"/>
>
> If I use 'x' and 'y' as the search and replace arguments, everything works
well. But I
> need to search for single-quotes and replace them with backslash +
single-quote. In
> other words, my XPath expression would look something like this:
>
> translate(normalize-space(.), ''', '\'')

translate() can only translate a character into another character or to
nothing. It is not possible using translate() to translate a character into
two or more characters.

For such tasks it is convenient to use the "str-map" template from FXSL.


This transformation:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:escape="my:escape"
exclude-result-prefixes="xsl escape"
>
   <xsl:import href="str-map.xsl"/>

   <xsl:output method="text"/>
   <xsl:variable name="vQ">'</xsl:variable>

 <xsl:template match="/">
     <xsl:variable name="vEscape" select="document('')/*/escape:*[1]"/>
     <xsl:call-template name="str-map">
       <xsl:with-param name="pFun" select="$vEscape"/>
       <xsl:with-param name="pStr">a'b'c'd</xsl:with-param>
     </xsl:call-template>
   </xsl:template>

   <escape:escape/>
    <xsl:template name="excape" match="escape:*">
      <xsl:param name="arg1"/>

      <xsl:if test="$arg1 = $vQ">\</xsl:if>
      <xsl:value-of select="$arg1"/>
    </xsl:template>

</xsl:stylesheet>

when performed (on any source.xml -- not used) produces the wanted result:

a\'b\'c\'d


=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL





 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread