[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Templates, variables, and tree fragments

Subject: Re: Templates, variables, and tree fragments
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Sat, 24 Aug 2002 17:24:52 +0100
md templates
Hi Kimberly,

> The below is a cut down version of the problem. The template for
> KH/Key/MD/@AskAvl can change the value in the attribute. The output
> of the 'row' node produced in the transform ion (RowMD template)
> shows the starting XML value of @AskAvl. But, I need the @AskAvl
> that was produced in the rebuilt 'MD' node (KH/Key/MD template)
[snip]
> I read a snippet somewhere (don't remember where I saw it) that indicated
> variables could call templates, so I tried -
>         <xsl:template name="RowMD">
>                 <xsl:variable name="Market">
>                         <xsl:element name="MD">
>                                 <xsl:apply-templates select="@*"/>
>                         </xsl:element>
>                 </xsl:variable >
>
> (When RowMD is called the current node is an MD node.)  This produces an
> error stating that the market variable does not have a nodeset.

That's right. When you set a variable using its content rather than
the select attribute (whether you set the variable by calling or
applying a template or through some other mechanism) then you create a
"result tree fragment". Result tree fragments are like mini result
trees -- a root node with some elements or text as children.

Unfortunately, you can't index into a result tree fragment like you
can into the *source tree*. To do that, you need to first turn it into
a node set, and to do that you need to use an extension function. I
don't know what processor you're using, but if you take a look at its
documentation it should somewhere tell you how to use its
"foo:node-set" extension function (where 'foo' is a prefix that's
associated with a namespace that depends on the processor). Once
you've declared the namespace for the extension function at the top of
your stylesheet, you can use the foo:node-set() extension function for
example to do:

  <xsl:value-of select="foo:node-set($Market)/MD/@AskAvl" />

to get the value of the AskAvl attribute on the new MD element that
you've just created.

If you need help getting the node-set() extension function working,
tell us what processor you're using and we'll be glad to assist.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.