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'][(_at_)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'][(_at_)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
<= '1099119599'])[position() = last()]
or abbreviating this:
(data[(_at_)id = 'archive'][(_at_)id='archive']/timestamp[(_at_)time <=
'1099119599'])[last()]
Cheers,
Wendell
======================================================================
Wendell Piez
mailto:wapiez(_at_)mulberrytech(_dot_)com
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
======================================================================