RE: [xsl] with-parameter?

Subject: RE: [xsl] with-parameter?
From: Jarno.Elovirta@xxxxxxxxx
Date: Thu, 4 Sep 2003 13:38:35 +0300
Hi,

> <!-- this template should be the "translation table" -->
>  <xsl:template name="component.name">
>   <xsl:param name="cname" />
>   <xsl:choose>
>    <xsl:when test="$cname='0000000001'">
>     One(
>     <xsl:value-of select="$cname" />
>     )
>    </xsl:when>
>    <xsl:when test="$cname='0000000002'">
>     Two(
>     <xsl:value-of select="$cname" />
>     )
>    </xsl:when>
>    <xsl:when test="$cname='0000000003'">
>     Three(
>     <xsl:value-of select="$cname" />
>     )
>    </xsl:when>
>    <xsl:when test="$cname='0000000004'">
>     Four(
>     <xsl:value-of select="$cname" />
>     )
>    </xsl:when>
>    <xsl:otherwise>
>     <xsl:value-of select="$cname" />
>    </xsl:otherwise>
>   </xsl:choose>
>  </xsl:template>
> </xsl:stylesheet>

[snip]

> What I would expect, is that all '000000001' will be
> substituted with 'One', and so on.

But why do you have the "(
     <xsl:value-of select="$cname" />
     )" in your stylesheet, then? Just use

  <xsl:when test="$cname='0000000001'">One</xsl:when>

if you only want "One"

> But doing all the above
> with Xalan, IE, or Mozilla results in the following:
>
> One(0000000001)Two(0000000005)
> Two(0000000002)Three(0000000006)
> Four(0000000004)Three(0000000003)
> 0000000007

Which is correct. What do you want?

> I don't know how it may happen, that if I pass '0000000005',
> it will print 'Two'?

No, because you don't have a xsl:when that would match "0000000005", so the xsl:otherwise will be used and it will print out the cname parameter value.

> Is this a bug, or normal behaviour?

It's a bug in your stylesheet if the stylesheet doesn't generate what you could want it to generate.

> However, if someone knows a better way to do this
> "translation" of codes to descriptive text, please let me know.

E.g.

  <xsl:template name="component.name">
    <xsl:param name="cname" />
    <xsl:choose>
      <xsl:when test="$lookup[@key = $cname]">
        <xsl:value-of select="$lookup[@key = $cname]/@value"/> ( <xsl:value-of select="$cname"/>)
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$cname"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  <xsl:variable name="lookup" select="document('')/*/x:lookup/item" xmlns:x="x"/>
  <x:lookup xmlns:x="x">
    <item key="0000000001" value="One" />
    <item key="0000000002" value="Two" />
    <item key="0000000003" value="Three" />
    <item key="0000000004" value="Four" />
  </x:lookup>

Cheers,

Jarno - Feindflug: Lagerhaft

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread