xsl-list
[Top] [All Lists]

RE: with-parameter?

2003-09-04 03:38:35
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[(_at_)key = $cname]">
        <xsl:value-of select="$lookup[(_at_)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



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