On 17/04/2008, Fraser Goffin <> 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/