[xquery-talk] Selecting everything before and after path, but without duplicated leafs

Junte Zhang zhangjunte at gmail.com
Sun Feb 10 01:55:52 PST 2008


Hi all,

I have an XML file (quite long) and I have a path to an element. I
want to select
(1) everything of that path and its descendants, at the same time I
want to return everything (2) before that path, and everything (3)
after that path. I was trying the XPath axes "preceding" and
"following", but these axes are returning duplicate leafs, which is
not what I want. I would like to reconstruct the original XML file,
but with an extra tag for the XPath selection ($unit).

This is how my XQuery looks like.

 let $doc := doc("file.xml")

 let $precedingUnit := $doc/ead[1]/archdesc[1]/dsc[1]/c01[1]/preceding::node()
 let $unit := $doc/ead[1]/archdesc[1]/dsc[1]/c01[1]/self::node()
 let $followingUnit := $doc/ead[1]/archdesc[1]/dsc[1]/c01[1]/following::node()
 return
 <out>
  <before>
  {
     $precedingUnit
  }
  </before>
  <select>
  {
     $unit
  }
  </select>
  <after>
  {
     $followingUnit
  }
  </after>
  </out>

I am using XQuery with Saxon: java -cp saxon9.jar net.sf.saxon.Query query.xq

Could you please help me?

Thank you very much, I am really desperate in getting this working.

Kind regards

jz


More information about the talk mailing list