Re: [xsl] passing param using value-of

Subject: Re: [xsl] passing param using value-of
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Fri, 17 Feb 2012 11:31:37 -0500
Hi again,

On 2/16/2012 6:03 PM, Andrew Welch wrote:
This works fine.

  <xsl:call-template name="myTemplate">
         <xsl:with-param name="arguments" select="preceding-sibling::*">
         </xsl:with-param>
</xsl:call-template>

But this doesn't:

<xsl:call-template name="myTemplate">
         <xsl:with-param name="arguments">
              <xsl:value-of select="preceding-sibling::*" />
         </xsl:with-param>
  </xsl:call-template>

Why ? How do I use value-of to set the value of a parameter ?

xsl:value-of generates a (single) text node. Depending on the parameter, that may be okay (or maybe not), even if the cases when a text node is good but a simple string is not even better are fairly rare.

Don't forget in the 2nd option that it's a text node child of a document node, whereas in the first option (using select) it's sequence type is element()* (i think)

Indeed. To spell this out:


<xsl:with-param name="arguments" select="preceding-sibling::*"/>

binds to $arguments a sequence of nodes, namely the preceding sibling elements.

<xsl:with-param name="arguments">
  <xsl:value-of select="preceding-sibling::*" />
</xsl:with-param>

binds to $arguments a temporary tree with a single text node, whose value is determined by evaluating "preceding-sibling::*".

Probably you want the first of these, not the second. But even if you wanted a string, not a sequence of nodes, you could specify that more directly and more efficiently by operating directly on the preceding siblings (with a function that returns a string) instead of by using xsl:value-of.

Cheers,
Wendell

--
======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================

Current Thread