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

Re: sorting and selecting the last value

Subject: Re: sorting and selecting the last value
From: Ming Yu <myu@xxxxxxxx>
Date: Thu, 08 Aug 2002 15:31:33 -0700
sort last field
Thanks a lot. It works just fine.

Ming

At 10:55 PM 8/8/2002 +0200, you wrote:
Hello Ming,

there is a difference between

<xsl:variable name="foo" select="bar"/>

and

<xsl:variable name="foo">
  <xsl:value-of select="bar"/>
</xsl:variable>

The first variable stores a node set, the second one a Result Tree Fragment (RTF). You have The same problem with your variable declaration. You can use an extension function to convert a RTF to a node set.

If you really only want to have the last node, you can do

<xsl:variable name="last-field-value">
  <xsl:for-each select="$full_path[contains($dbs_searched, @db)]/*">
    <xsl:sort select="."/>
    <xsl:if test="position()=last()">
      <xsl:copy-of select="."/>
    </xsl:if>
  </xsl:for-each>
</xsl:variable>

You create a RTF too, but can access the value through <xsl:value-of select="$last-field-value"/> and copy the node to the output via <xsl:copy-of select="$last-field-value"/>. You can't do node set functions on a RTF.

What are you trying with <xsl:for-each select="self::node()[not(.=following::node())]">??

If you sort them and you want to have the last one, you don't need that. If you want to have unique nodes, you can do <xsl:if test="not(. = following-sibling::*)"> to reach the same.

If you really need the current content of $field-value as you have it, only as node set, you should think about rearranging your code to use a "correct" grouping method (preceding/following-sibling axis or Muenchian Method). Don't do two things (sorting + grouping) in one step.

Regards,

Joerg

Ming wrote:
Hi,
I'm trying the access the last value of a sorted list but for some how,
the system produces the error:   Can not convert #RTREEFRAG to a
NodeList.
Here is my codes:
    <xsl:variable name='field_value'>
        <xsl:for-each select="$full_path[contains($dbs_searched,
@db)]/*">
                <xsl:sort select="."/>
                <xsl:for-each
select="self::node()[not(.=following::node())]">
                        <xsl:copy-of select="."/>
                </xsl:for-each>
        </xsl:for-each>
    </xsl:variable>
<xsl:variable name="lastval" select="$field_value[last()]" />
And the error poinrts to the last line: <xsl:variable name="lastval"
select="$field_value[last()]" />
But if I do <xsl:variable name='field_value'
select='$full_path[contains($dbs_searched, @db)]'/>  everything works
just fine.
Do you have some idea on what could cause the problem?
Thanks for your help.
Ming


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


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.