|
Subject: Re: [xsl] XSL Choose inside a function?? From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Fri, 25 Oct 2002 00:56:08 +0100 |
Hi Simon,
> I'm a xsl newbie, just to let you know.
But it looks as though you're using XSLT 2.0 rather than XSLT 1.0,
correct?
> my problem is, that I have to write a function with a if-else
> statement, so I tried it like this:
>
> <xsl:function name="xsl:getParam">
> <xsl:param name="class"/>
> <xsl:param name="param"/>
> <xsl:choose>
> <xsl:when test="$class = '0'">
> <xsl:choose>
> <xsl:when test="$param = '0'">
> <xsl:result select="/jsp_entity/data/bean/fields/pkey"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:result select="/jsp_entity/data/bean/fields/parameter[position()=$param]"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:when>
> <xsl:otherwise>
> <xsl:result select="/jsp_entity/data/bean/classes/helper[position()=$class]/parameter[position()=$param]"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:function>
xsl:choose isn't allowed inside xsl:function in XSLT 2.0. Instead, you
have to use XPath 2.0's if/then/else:
<xsl:function name="my:getParam">
<xsl:param name="class" />
<xsl:param name="param" />
<xsl:result select="
if ($class = '0') then
if ($param = '0') then
/jsp_entity/data/bean/fields/pkey
else
/jsp_entity/data/bean/fields/parameter[position() = $param]
else
/jsp_entity/data/bean/classes/helper[position() = $class]/parameter[position() = $param]" />
</xsl:function>
If you weren't returning a node, or if you were only interested in the
node's string value, or if a copy would do, then you could use
xsl:choose inside a variable and then return the value of the
variable -- something like:
<xsl:function name="xsl:getParam">
<xsl:param name="class"/>
<xsl:param name="param"/>
<xsl:variable name="result">
<xsl:choose>
<xsl:when test="$class = '0'">
<xsl:choose>
<xsl:when test="$param = '0'">
<xsl:copy-of select="/jsp_entity/data/bean/fields/pkey"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="/jsp_entity/data/bean/fields/parameter[position()=$param]"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="/jsp_entity/data/bean/classes/helper[position()=$class]/parameter[position()=$param]"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:result select="$result" />
</xsl:function>
You could use EXSLT's func:function (with XSLT 1.0) in exactly the way
that you have, with func:function inside the xsl:choose -- see
http://www.exslt.org/func. It's supported by Saxon, Xalan and various
other processors.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] XSL Choose inside a funct, David Carlisle | Thread | RE: [xsl] XSL Choose inside a funct, Michael Kay |
| Re: [xsl] XSL-FO file works for FOP, J.Pietschmann | Date | [xsl] How to select some items from, Paul S |
| Month |