This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: problem with Passing Parameters to Templates


Thanks, David.

OK, my question simply is: Can I output the value of a element which is 
passed thru parameter ( in my case the element is 'codec' and its value is 
1234 )? I understand that I can do something simply like <xsl:value-of 
select="codec">. But I would like to do it with named template so that I can 
call the template for other elements.

in XML file, there are two lines like
<codec>1234</codec>
<desc>5678</desc>

And the xsl file will be something like:

     <xsl:call-template name="opt_template">
         <xsl:with-param name="node"  select="'codec'"/>
     </xsl:call-template>

     <xsl:call-template name="opt_template">
         <xsl:with-param name="node"  select="'desc'"/>
     </xsl:call-template>

     <xsl:template name="opt_template">
        <xsl:param name="node"></xsl:param>

=======what should be in here to output the value of element codec or 
desc????

     </xsl:template>

Is it doable?

Thanks,

Helen

>From: David Carlisle <davidc@nag.co.uk>
>Reply-To: xsl-list@lists.mulberrytech.com
>To: xsl-list@lists.mulberrytech.com
>Subject: Re: [xsl] problem with Passing Parameters to Templates
>Date: Mon, 22 Jan 2001 15:25:33 GMT
>
> > Did I do something wrong?
>
>yes:-)
>
>Firstly the simple answer to your question:
>
> > What I really want to do is to output the value of element codec(
>
>appears to be
>
><xsl:value-of select=".//codec"/>
>
>in which case you don't have any params to worry about, but
>to see what's wrong with your code node that you have defined $node
>to be a string. It is always the empty string or 'codec'.
>
>           <xsl:if test=".//*[$node]">
>
>this is using $node in a predicate so the string will be coerced to a
>boolean. If it is empty (ie if the named template is called without an
>explicit parameter) then it will have boolean value false
>
>*[false()]
>
>selects all elements for which false is true.
>
>.// searches for all descendents of the current node for which the above
>is true.
>
>As false is never true this will return the empty nosde set.
>
>This node set is used in an if test so will be coerced to boolean as
>false. So in this case the value-of clause will be skipped.
>
>If $node is codec then [$codec] is the same as [true()] so
>.//*[$codec]
>will be true if the current node has any element children and will be
>false otherwise.
>
>If it is true then the value-of will be evaluated. which will return the
>value of the first codec descendent.
>
>As you see the xsl:if isn't doing anything useful in either case
>you could just miss it out and say
>        <xsl:value-of select=".//*[name()=$node]"/>
>
>If there are no elements of that name, you don't need to test with
>xsl:if, you just get nothing returned.
>
>David
>
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>

_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]