[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] XQuery Puzzle
- From: "Andrew Welch" <andrew.j.welch@gmail.com>
- To: "Fraser Goffin" <goffinf@googlemail.com>
- Date: Thu, 17 Apr 2008 09:44:34 +0100
On 17/04/2008, Fraser Goffin <goffinf@googlemail.com> wrote:
> Sorry for asking an XQuery question here, if there is a more
> appropriate forum please let me know.
>
> Anyway, a question relating to this simple XQuery has been circulating
> on another group, but I am puzzled as to whether using // on a
> sequence is valid (see the return clause below). I tried in a couple
> of XQuery parsers (Saxon9 + the one built into XML Spy) and both
> return no results ??
>
> let $set := (
> <div1>one </div1>,
> <div1 class="doc">two </div1>,
> <div1>three </div1>,
> <div1 class="doc">four </div1>,
> <gotcha>START</gotcha>,
> <div1>five </div1>
> )
> return $set//gotcha/preceding-sibling::div1[@class="doc"][1]
It's because they don't share a parent that they aren't siblings - so
the preceding-sibling axis returns nothing. Give them a common parent
such as:
let $set := <foo>
<div1>one </div1>,
<div1 class="doc">two </div1>,
<div1>three </div1>,
<div1 class="doc">four </div1>,
<gotcha>START</gotcha>,
<div1>five </div1></foo>
and it will return:
<div1 class="doc">four </div1>
remember to use brackets if you wanted the first in document order
rather than the nearest sibling:
($set//gotcha/preceding-sibling::div1[@class="doc"])[1]
returns
<div1 class="doc">two </div1>
The xquery list is at x-query.com
cheers
--
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]