|
Subject: RE: [xsl] with-parameter? From: "Michael Kay" <mhk@xxxxxxxxx> Date: Thu, 4 Sep 2003 11:40:08 +0100 |
You are passing your template a set of names:
<xsl:with-param name="cname"
select="following-sibling::component/name" />
when you should be passing a single name:
<xsl:with-param name="cname"
select="following-sibling::component[1]/name" />
When you test $cname = "x", it tests if any member of the set is equal
to "x".
Michael Kay
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of kommersz
> Sent: 04 September 2003 10:52
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] with-parameter?
>
>
> 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
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] with-parameter?, kommersz | Thread | RE: [xsl] with-parameter?, Jarno . Elovirta |
| RE: [xsl] with-parameter?, Jarno . Elovirta | Date | RE: [xsl] WHITESPACE WITHIN TAGS., Michael Kay |
| Month |