[xsl] Re: apply-templates abnormality???

Subject: [xsl] Re: apply-templates abnormality???
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Fri, 10 May 2002 22:28:19 -0700 (PDT)
> I am trying to create data in my stylesheet and apply a template as
> if
> the data came from the source document.
> For example:
>         <xsl:variable name="add-apply-button">
>             <xsl:element name="button">
>                 <xsl:element name="file">APPLY_BUTTON</xsl:element>
>                 <xsl:element name="result">APPLY</xsl:element>
>             </xsl:element>
>         </xsl:variable>
>         <xsl:apply-templates select="$add-apply-button">
>             <xsl:with-param
> name="submit-form">AddEditView</xsl:with-param>
>         </xsl:apply-templates>
> I want this to simulate the following xml data:
>         <button>
>             <file>APPLY_BUTTON</file>
>             <result>APPLY</result>
>         </button>
> It works except for one major problem.  The param "submit-form" does
> not
> seem to get set when the "button" template is applied.  The "button"
> template is getting invoked and it is acting as if the data came from
> the source document.  The problem is the param.  It is an empty
> string
> even though I am using with-param and giving it a value.
> I am using Saxon 6.3.  Does this seem like a problem with my XSLT
> code
> or with Saxon?

It is with your code, and obviously Saxon 6.3 implements XSLT 1.1,
otherwise you'd have an error reported on your attempt to use the RTF
(Result Tree Fragment) as a node-set.

The problem is that an RTF, when converted to a node-set is a separate
xml document, so the following code:

>         <xsl:apply-templates select="$add-apply-button">
>             <xsl:with-param
> name="submit-form">AddEditView</xsl:with-param>
>         </xsl:apply-templates>

will apply a template to the root (/) of the document, to which
$add-apply-button evaluates.

Probably your template (if any) matching / does not care for any
parameters, nor it passes them down to any templates applied on /node()

The solution is to replace the above with:

         <xsl:apply-templates select="$add-apply-button/*">

in case you're using an XSLT 1.0 complient XSLT processor, you'll have
to use vendor:node-set($add-apply-button)/*

Dimitre Novatchev.


Do You Yahoo!?
LAUNCH - Your Yahoo! Music Experience

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

Current Thread