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

Re: accessing last element of node set passed as param

Subject: Re: accessing last element of node set passed as parameter
From: "paul morgan" <pmorg@xxxxxxxxx>
Date: Tue, 21 May 2002 11:40:33 -0700
xsl get last element
Thanks David!  Some of this is starting to click ... but then again something happens that shuts the clicker down.

Since order is important to me, I decided to heed your warning about the ordering of a union being implementation dependent, so I set about making all of the "BAR" elements be siblings of one another.  I replaced:

    <xsl:apply-templates select="following-sibling::*[1]">
        <xsl:with-param name="result" select="$result|xalan:nodeset($new)"/>
    </xsl:apply-templates> </xsl:template> 

with:

    <xsl:apply-templates select="following-sibling::*[1]">
        <xsl:with-param name="result">
            <xsl:copy-of select="$result"/>
            <BAR i="{$i}"/>
        </xsl:with-param>
    </xsl:apply-templates> </xsl:template> 

but now I get the following error message:

    Can not convert #RTREEFRAG to a NodeList!

at the line:

    <xsl:copy-of select="($result/BAR)[last()]" />

the first time the "A" template is matched with a non-empty value for "result".  Shouldn't "result" be a node set?

Paul (I think this language is going to make my head explode)
 
--

On Tue, 21 May 2002 18:09:50  
 David Carlisle wrote:
>
>
>     produce identical output given the input:
>      <IN><A/><A/><A/><A/><A/><A/></IN>
>
>   Below is a transform in which the two lines:
>
>    <xsl:copy-of select="($result/BAR)[last()]" />
>    <xsl:copy-of select="$result[last()]" />
>
>
> "$result|xalan:nodeset($new)"/>
>
>Ha! I guessed two possible meanings:
>
>
>
>> But they can not have done. If $result holds a root node then
>> $result/BAR
>> selects all the BAR children of that node and
>> ($result/BAR)[last()]
>> selects the last of those children.
>> 
>> But if $result contains three BAR nodes then
>> 
>> $result/BAR
>> 
>> selects all the BAR children of each element of $result, and that is
>> empty so ($result/BAR)[last()] is similarly empty.
>> 
>>  
>
>But in fact you have a third.
>
>$result in this case contains three _root_ nodes so $result does have
>three nodes, so <xsl:copy-of select="($result/BAR)[last()]" does pick
>out the last. But they are root nodes not BAR nodes so
>"($result/BAR)[last()]" gives you the last BAR.
>Since copy-of throws away root nodes and just gives you thier contents,
>you do get the same.
>
>Note however that it is undefined which one you get, you are taking the
>union of a new root node with a set of existing root nodes. Root nodes
>are in an implementation defined order so you can not be sure that the
>last one you added is the one you get with last().
>
>If the order matters you need to make sure your bar elements are
>siblings of each other, then the result variable will have a single root
>node containing the elements that you are interested in.
>
>David
>
>_____________________________________________________________________
>This message has been checked for all known viruses by Star Internet
>delivered through the MessageLabs Virus Scanning Service. For further
>information visit http://www.star.net.uk/stats.asp or alternatively call
>Star Internet for details on the Virus Scanning Service.
>
> XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
>
>


________________________________________________________
Outgrown your current e-mail service?
Get a 25MB Inbox, POP3 Access, No Ads and No Taglines with LYCOS MAIL PLUS.
http://login.mail.lycos.com/brandPage.shtml?pageId=plus

 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.