[xsl] Re: Hmmmm.... translate function

Subject: [xsl] Re: Hmmmm.... translate function
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Fri, 14 Mar 2003 22:50:27 +0100
"Karl Stubsjoen" <karl@xxxxxxxxxxxxx> wrote in message
news:003701c2ea62$55b89550$0afc020a@xxxxxxxxxxxxxxxx
> > Translate is on character basis, that is translating the character on
> > the 2nd string to the character on the same position on the 3rd string.
> > More characters you provide on 3rd string will just be ignored.
> > Seems there's no convinient function in xsl to be found to solve your
> > problem. You may want to combine substring-before and substring-after
> > functions.
>
> Err... that stinks.

With FXSL one will use the "str-map" template like this:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:replPlus="f:replPlus"
>
   <xsl:import href="str-map.xsl"/>

   <xsl:output method="text"/>

   <!-- to be applied on any xml source -->

   <xsl:output omit-xml-declaration="yes" indent="yes"/>

   <xsl:template match="/">
     <xsl:variable name="vTestMap" select="document('')/*/replPlus:*[1]"/>
     <xsl:call-template name="str-map">
       <xsl:with-param name="pFun" select="$vTestMap"/>
       <xsl:with-param name="pStr" select="'X + Y + Z'"/>
     </xsl:call-template>
   </xsl:template>

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

      <xsl:choose>
        <xsl:when test="$arg1 = '+'">
          <xsl:value-of select="'%2B'"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="$arg1"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>

</xsl:stylesheet>

The result of applying this transformation on any xml.source (ignored) is to
translate the "+" in "X + Y + Z" into "%2B":

X %2B Y %2B Z



=====
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