xsl-list
[Top] [All Lists]

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

2009-05-12 13:24:10
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[(_at_)str=$str]/*[(_at_)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(_at_)mulberrytech(_dot_)com> 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[(_at_)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[(_at_)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[(_at_)str=$str]/*[(_at_)lang=$toLang]"

I hope that helps,
Wendell



======================================================================
Wendell Piez                           
 mailto:wapiez(_at_)mulberrytech(_dot_)com
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
======================================================================


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



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