Oxygen XML Editor
 
[XML-DEV Mailing List Archive Home] [By Thread] [By Date]

Re: [xml-dev] XQuery Puzzle


  • From: "Andrew Welch" <andrew.j.welch@...>
  • To: "Fraser Goffin" <goffinf@...>
  • Date: Thu, 17 Apr 2008 09:44:34 +0100

On 17/04/2008, Fraser Goffin <goffinf@...> 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]
 
© 2002-2008 SyncRO Soft Ltd. All rights reserved. | Sitemap | Privacy Policy
This website was created & generated with <oXygen/> XML Editor
Keywords