call-template name="{$pCall}" possible ?

Discussion in 'XML' started by FrankS, Feb 2, 2005.

  1. FrankS

    FrankS Guest

    Hi All,
    I have a problem with an call-template cmd at xslt 1.0:

    With: pCall = 'ExInput'
    ------
    I try to:

    <xsl:call-template name="{$pCall}">
    <xsl:with-param name="pVal" select="$pValue"/>
    </xsl:call-template>
    <!-- ============ -->
    <!-- ============ -->
    <xsl:template name="ExInput">
    <xsl:param name="pVal" select="'0'"/>
    <td style="background-color:#C0C0C0;"><xsl:call-template
    name="XYZ"><xsl:with-param name="pVal"
    select="."/></xsl:call-template></td>
    </xsl:template>
    <!-- ============ -->
    -------
    But it's not possible to call the Template with the param "{$pCall}" !!
    I get the error: undefined template

    It there no way to call - or it there an error in my code?
    Many thanks for your help before!
    BR
    Frank
     
    FrankS, Feb 2, 2005
    #1
    1. Advertising

  2. call template is like a function call in most compiled languages, the
    function (template) name has to be known at complie time.It can't be
    constructed from an expression.

    Often the answer is to pass in a node not a string then use
    apply-templates not call-templates then the template that activates will
    be the one that matches your node.

    David
     
    David Carlisle, Feb 2, 2005
    #2
    1. Advertising

  3. FrankS wrote:
    > Hi All,
    > I have a problem with an call-template cmd at xslt 1.0:
    >
    > With: pCall = 'ExInput'
    > ------
    > I try to:
    >
    > <xsl:call-template name="{$pCall}">
    > <xsl:with-param name="pVal" select="$pValue"/>
    > </xsl:call-template>
    > <!-- ============ -->
    > <!-- ============ -->
    > <xsl:template name="ExInput">
    > <xsl:param name="pVal" select="'0'"/>
    > <td style="background-color:#C0C0C0;"><xsl:call-template
    > name="XYZ"><xsl:with-param name="pVal"
    > select="."/></xsl:call-template></td>
    > </xsl:template>
    > <!-- ============ -->
    > -------
    > But it's not possible to call the Template with the param "{$pCall}" !!
    > I get the error: undefined template
    >
    > It there no way to call - or it there an error in my code?
    > Many thanks for your help before!
    > BR
    > Frank
    >


    hi,

    it is impossible to do it directly

    however, there is a pattern for this, named "template tags":

    first, you have to mark your template with a tag; the template must
    match that tag:

    <my:ExInput/>
    <xsl:template match="my:ExInput">
    <!-- your stuff here -->
    </xsl:template>

    <my:ExOutput/>
    <xsl:template match="my:ExOutput">
    <!-- your stuff here -->
    </xsl:template>

    to invoke it, use this:
    <xsl:apply-templates select="document()/*/my:*[ local-name()=$pCall ]"/>

    --
    Cordialement,

    ///
    (. .)
    -----ooO--(_)--Ooo-----
    | Philippe Poulard |
    -----------------------
     
    Philippe Poulard, Feb 2, 2005
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?iso-8859-1?B?bW9vcJk=?=
    Replies:
    7
    Views:
    863
    Roedy Green
    Jan 2, 2006
  2. ding feng
    Replies:
    2
    Views:
    2,857
    ding feng
    Jun 25, 2003
  3. Andrzej
    Replies:
    7
    Views:
    427
    Andrzej
    May 23, 2005
  4. Replies:
    7
    Views:
    578
  5. Bobby Chamness
    Replies:
    2
    Views:
    2,416
    Joe Smith
    Apr 22, 2007
Loading...

Share This Page