xsl-list
[Top] [All Lists]

Re: [xsl] use choose in call-templates not possble

2012-05-10 07:34:52
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>
--~--