You can also use if-then-else in select (XPath/XSLT 2.0).
<xsl:call-template name="translateDcml">
<xsl:with-param name="factor" select="if (FCDecimalPlace != '')
then FCDecimalPlace else LCDecimalPlace"/>
</xsl:call-template>
-----Original Message-----
From: G. Ken Holman [mailto:gkholman(_at_)CraneSoftwrights(_dot_)com]
Sent: Thursday, May 10, 2012 2:34 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com;
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] use choose in call-templates not possble
At 2012-05-10 13:25 +0100, henry human wrote:
<xsl:variable name="Fcfactor">
<xsl:call-template name="translateDcml">
<xsl:choose>
<xsl:when test="FCDecimalPlace != ''">
<xsl:with-param name="factor" select="FCDecimalPlace"/>
<xsl:otherwise>
<xsl:with-param name="factor" select="LCDecimalPlace"/>
</xsl:otherwise>
</xsl:choose>
</xsl:call-template>
</xsl:variable>
You do not show how you are working with $factor and that affects the
answer. You are passing a node in your old code.
If you need a node in the function, then the ways are:
In XSLT 1:
<xsl:variable name="Fcfactor">
<xsl:choose>
<xsl:when test="FCDecimalPlace != ''">
<xsl:call-template name="translateDcml">
<xsl:with-param name="factor" select="FCDecimalPlace"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="translateDcml">
<xsl:with-param name="factor" select="LCDecimalPlace"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
In XSLT 2:
<xsl:variable name="Fcfactor">
<xsl:call-template name="translateDcml">
<xsl:with-param name="factor" as="node()">
<xsl:choose>
<xsl:when test="FCDecimalPlace != ''">
<xsl:sequence select="FCDecimalPlace"/>
</xsl:when>
<xsl:otherwise>
<xsl:sequence select="LCDecimalPlace"/>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
If you need only the value to be passed then this works with both XSLT 1
and
XSLT 2 by passing a temporary tree with the value:
<xsl:variable name="Fcfactor">
<xsl:call-template name="translateDcml">
<xsl:with-param name="factor">
<xsl:choose>
<xsl:when test="FCDecimalPlace != ''">
<xsl:value-of select="FCDecimalPlace"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="LCDecimalPlace"/>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
The whole key is to put the choice inside the value of the parameter.
I hope this helps.
. . . . . . . . . Ken
--
Public XSLT, XSL-FO, UBL and code list classes in Europe -- Oct 2012
Contact us
for world-wide XML consulting and instructor-led training Free 5-hour
lecture: http://www.CraneSoftwrights.com/links/udemy.htm
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
G. Ken Holman
mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Google+ profile: https://plus.google.com/116832879756988317389/about
Legal business disclaimers: http://www.CraneSoftwrights.com/legal
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--