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

Re: Using preceding-sibling::node()

Subject: Re: Using preceding-sibling::node()
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Mon, 01 Nov 2004 14:45:57 -0500
preceding sibling attribute
Hi Dilip,

At 02:28 PM 11/1/2004, you wrote:
Hi,

I'm fairly new to XML and I'm trying to modify my query so that it fetches the preceding sibling to
the originally requested node if the originally requested node does not exist.

Sounds fine, up to the point where you say you want the preceding sibling of a node that doesn't exist ... XSLT isn't smart enough to know where in the input a node would be if it existed.


For example:
if my original query was something like
child::data[attribute::id = 'archive'][@id='archive']/child::timestamp[attribute::time = '1099119599']


and if the node with that particular timestamp is not present in the XML document I'd like to modify my query
in such a way that it fetches the node that has a timestamp < 1099119599.


I understand if I change my query to
child::data[attribute::id = 'archive'][@id='archive']/child::timestamp[attribute::time < '1099119599']
then all the nodes with timestamp < 1099119599 get returned

That's correct.


Yet if your nodes are already ordered by time (which assumption is built into your question), you can get the last of this set in document order by grouping the set and using a predicate on the group. The last() function, which returns the size of the group, is designed for use in exactly this kind of situation. Using the query you've constructed (while removing that second, redundant predicate and changing '<' to '<=' in case that exact timestamp exists after all), that would be

(child::data[attribute::id = 'archive']/child::timestamp[attribute::time &lt;= '1099119599'])[position() = last()]

or abbreviating this:

(data[@id = 'archive'][@id='archive']/timestamp[@time &lt;= '1099119599'])[last()]

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

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.