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

Subject: Re: [xsl] Error when params are in Xpath expression
From: Dmitri Snytkine <d.snytkine@xxxxxxxxx>
Date: Tue, 12 May 2009 13:23:35 -0400
I think you forgot to provide the correct example of how I would use
the path, you said:
> In this case you could have
>
> document('')/*/trans:tr/tr_string[@str=$str]/*[@lang=$toLang]"

But that's how I am using it now. How would I use it if I change the
xml format to use 'lang' attribute of a string?

Then there is a question of which format would be faster for Xpath to
test to see if string exists in a desired language?



On Tue, May 12, 2009 at 11:00 AM, Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
wrote:
> 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