xsl-list
[Top] [All Lists]

String replace special case

2006-02-06 10:00:41
I wrote this special case of string replace and tought to post this to
go to the list archives, maybe it'll be usefull to someone.

It's used to replace some keywords in a url-like string with the
results from another url-like string, for example, with

list_entidadeprocessos.aspx?k=PAI&entidade_k={ENTIDADE_K}&processo_k={PROCESSO_K}

and

?businessclass=PROCESSO&k=K00047&processo_k=XX0001'

will give

list_entidadeprocessos.aspx?k=PAI&entidade_k=K00047&processo_k=XX0001


In my concrete case the first string is retrieved from a database
where some app definitions are stored, and the secons is the qwery
string of the actual page where the transformation is being made.


It has two minor bugs that none of the users have found, i'll fix then
one of theses days :)


        <xsl:template name="replace-values">
                <xsl:param name="textfrom"/>
                <xsl:param name="textwhere"/>
                <xsl:variable 
name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable>
                <xsl:variable 
name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
                <xsl:choose>
                        <xsl:when test="contains($textfrom, '{')">
                                <xsl:variable name="lookfor"
select="substring-before(substring-after($textfrom,'{'),'}')"/>
                                <xsl:variable name="before" 
select="substring-before($textfrom,
concat('{',$lookfor,'}'))"/>
                                <xsl:variable name="after" 
select="substring-after($textfrom,
concat('{',$lookfor,'}'))"/>
                                <xsl:variable name="value">
                                        <xsl:variable name="ulookfor" 
select="translate($lookfor, $lower,
$upper)"/>
                                        <xsl:variable name="llookfor" 
select="translate($lookfor, $upper,
$lower)"/>
                                        <xsl:variable name="utextwhere" 
select="translate($textwhere,
$lower, $upper)"/>
                                        <xsl:variable name="ltextwhere" 
select="translate($textwhere,
$upper, $lower)"/>
                                        <xsl:choose>
                                                <xsl:when
test="substring-before(substring-after($utextwhere,concat($ulookfor,'=')),'&amp;')">
                                                        <xsl:value-of
select="substring-before(substring-after($utextwhere,
concat($ulookfor,'=')),'&amp;')"/>
                                                </xsl:when>
                                                <xsl:when
test="substring-before(substring-after($ltextwhere,concat($llookfor,'=')),'&amp;')">
                                                        <xsl:value-of
select="substring-before(substring-after($ltextwhere,
concat($llookfor,'=')),'&amp;')"/>
                                                </xsl:when>
                                                <xsl:when 
test="substring-after($utextwhere, concat($ulookfor,'='))">
                                                        <xsl:value-of 
select="substring-after($utextwhere,
concat($ulookfor,'='))"/>
                                                </xsl:when>
                                                <xsl:when 
test="substring-after($ltextwhere, concat($llookfor,'='))">
                                                        <xsl:value-of 
select="substring-after($ltextwhere,
concat($llookfor,'='))"/>
                                                </xsl:when>
                                        </xsl:choose>
                                </xsl:variable>
                                <xsl:value-of select="$before"/>
                                <xsl:value-of select="$value"/>
                                <xsl:call-template name="replace-values">
                                        <xsl:with-param name="textfrom" 
select="$after"/>
                                        <xsl:with-param name="textwhere" 
select="$textwhere"/>
                                </xsl:call-template>
                        </xsl:when>
                        <xsl:otherwise>
                                <xsl:value-of select="$textfrom"/>
                        </xsl:otherwise>
                </xsl:choose>
        </xsl:template>

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>