[xsl] with-parameter?

Subject: [xsl] with-parameter?
From: kommersz <kommersz@xxxxxxxxxxx>
Date: Thu, 4 Sep 2003 11:52:18 +0200 (CEST)
Hi all!

I got the following problem. I've tried to make a
translation in an XSLT file, which converts codes into human
readable format based upon an internal "translation table".
I produced the following xsl:


<?xml version="1.0" encoding="iso-8859-2"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:template match="/root">
  <html>
   <body>
    <xsl:for-each select="component">
     <xsl:if test="position() mod 2=1">
      <xsl:call-template name="component.name">
       <xsl:with-param name="cname" select="name" />
      </xsl:call-template>
      <xsl:choose>
       <xsl:when test="following-sibling::component">
        <xsl:call-template name="component.name">
         <xsl:with-param name="cname"
select="following-sibling::component/name" />
        </xsl:call-template>
       </xsl:when>
      </xsl:choose>
      <br />
     </xsl:if>
    </xsl:for-each>
   </body>
  </html>
 </xsl:template>

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

Tried to apply it to the following xml:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<root>
 <component>
  <name>0000000001</name>
 </component>
 <component>
  <name>0000000005</name>
 </component>
 <component>
  <name>0000000002</name>
 </component>
 <component>
  <name>0000000006</name>
 </component>
 <component>
  <name>0000000004</name>
 </component>
 <component>
  <name>0000000003</name>
 </component>
 <component>
  <name>0000000007</name>
 </component>
</root>

What I would expect, is that all '000000001' will be
substituted with 'One', and so on. 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

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

Is this a bug, or normal behaviour?

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

Thanks a lot

   k

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


Current Thread