Re: [xsl] Error when params are in Xpath expression

Subject: Re: [xsl] Error when params are in Xpath expression
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Tue, 12 May 2009 11:00:04 -0400
Dmitri,

At 07:06 AM 5/12/2009, you wrote:
<!-- get translation of a string -->
    <xsl:template name="translateString">
        <xsl:param name="str" select="'recent_albums'"/>
        <xsl:param name="toLang"/>
        <xsl:param name="fallback" select="'en'"/>

        <xsl:choose>
            <xsl:when test="true()">

                                <xsl:value-of
select="document('')/*/trans:tr/tr_string[@str=$str]/$toLang"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="'not found'"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>


I get errors when running this template. If I manually replace the $str and $toLang, then I am getting the correct result.

<xsl:value-of select="document('')/*/trans:tr/tr_string[@str='recent_images']/ru"/>

What is wrong with my syntax that uses params? Are params allowed in
Xpath expression?

Only the "/$toLang" step will give the error.


You have a couple of options. You could fall back on name testing, and use the step "/*[name()=$toLang]".

If you find that cumbersome (and some of us do), you could remodel somewhat. Instead of using 'de', 'fr', 'en' and so forth as element names:

<de>Halt<de>
<fr>Arretez</fr>
<en>Stop</en>

you could reduce them to values on attributes:

<str lang="de">Halt</str>
<str lang="fr">Arretez</str>
<str lang="en">Stop</str>

In this case you could have

document('')/*/trans:tr/tr_string[@str=$str]/*[@lang=$toLang]"

I hope that helps,
Wendell



======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================

Current Thread