[xquery-talk] xpath/xquery to eleminate certain nodes

Michael Kay mike at saxonica.com
Tue Aug 26 16:56:17 PDT 2008


To run XQuery Update in Saxon you need the Saxon-SA version of the product,
and you need to run it with updating enabled.

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: talk-bounces at x-query.com 
> [mailto:talk-bounces at x-query.com] On Behalf Of Christian Schlaefcke
> Sent: 26 August 2008 15:13
> To: talk at x-query.com
> Subject: Re: [xquery-talk] xpath/xquery to eleminate certain nodes
> 
> Thank you John!
> 
> looks promising! But after I tried to adapt it to my 
> application I have some trouble with XmlBeans and Saxon that 
> I use to run my queries.
> 
> After I found out that xquery uptate was not available with 
> the XmlBeans/Saxon versions I used (2.3.0/8.7) I upgraded to versions
> (2.4.0/9.1.0.1) and now I get this error:
> 
> Error on line 3 column 9
>   XPST0003: XQuery syntax error in #...$this external; copy $#:
>     Unexpected token "copy" in path expression
> 
> My query looks like this:
>   declare namespace mns='http://www.mynamespace.com';
>   copy $a := /
>   modify delete node
> $a/mns:sites/mns:site//mns:categories/mns:category[@id = "888"]
>   return $a
> 
> Did someone encounter this problem before?
> 
> Thanks & Regards,
> 
> Christian
> 
> 
> > Hi Christian,
> >
> > XQuery Update can be used to solve your problem fairly easily - 
> > something like this should do the trick:
> >
> > copy $a := /
> > modify delete nodes $a/site/sites//categories/category[@name = 
> > 'hidden'] return $a
> >
> > John
> >
> > Christian Schlaefcke wrote:
> >> Hi,
> >>
> >> I am fighting with a xpath/xquery expression to select the 
> whole xml 
> >> document except of certain nodes that I want to remove. 
> The general 
> >> structure of the document should be preserved.
> >>
> >> With my approaches I either select too much or too less and my 
> >> research @ google & co. did not bring me any further :-(
> >>
> >> The document structure is a bit tricky (arbitrarily nested 
> >> categories) - imagine the following document:
> >> <sites>
> >>   <site>
> >>     <categories>
> >>       <category name="root">
> >>         <categories>
> >>           <category name="category_1">
> >>             <some>
> >>               <further>
> >>                 <nested>
> >>                   <info info_id="1">Important Information</info>
> >>                 </nested>
> >>               </further>
> >>             </some>
> >>           </category>
> >>           <category name="category_2">
> >>             <some>
> >>               <further>
> >>                 <nested>
> >>                   <info info_id="2">Less Important 
> Information</info>
> >>                 </nested>
> >>               </further>
> >>             </some>
> >>           </category>
> >>         </categories>
> >>       </category>
> >>       <category name="hidden">
> >>         <categories>
> >>           <category name="dont_need_it">
> >>             <some>
> >>               <further>
> >>                 <nested>
> >>                   <info info_id="3">Unimportant Information</info>
> >>                 </nested>
> >>               </further>
> >>             </some>
> >>           </category>
> >>           <category name="dont_need_it_too">
> >>             <some>
> >>               <further>
> >>                 <nested>
> >>                   <info info_id="4">Even More Unimportant 
> >> Information</info>
> >>                 </nested>
> >>               </further>
> >>             </some>
> >>           </category>
> >>         </categories>
> >>       </category>
> >>     </categories>
> >>   </site>
> >> </sites>
> >>
> >> What I want would be:
> >> <sites>
> >>   <site>
> >>     <categories>
> >>       <category name="root">
> >>         <categories>
> >>           <category name="category_1">
> >>             <some>
> >>               <further>
> >>                 <nested>
> >>                   <info info_id="1">Important Information</info>
> >>                 </nested>
> >>               </further>
> >>             </some>
> >>           </category>
> >>         </categories>
> >>       </category>
> >>     </categories>
> >>   </site>
> >> </sites>
> >>
> >> I tried several approaches like:
> >> /site/sites//categories/category[@name = 'category_1'] or 
> >> /site/sites//categories/category[@name != 'hidden'] or 
> >> 
> /site/sites//categories/category/some/further/nested/info[@info_id = 
> >> '1']
> >>
> >> But all I get is something like this:
> >> <category name="category_1">
> >>   <some>
> >>     <further>
> >>       <nested>
> >>         <info info_id="1">Important Information</info>
> >>       </nested>
> >>     </further>
> >>   </some>
> >> </category>
> >>
> >> What is missing to preserve the parent xml data?
> >>
> >> Any hint that will point me to the right direction would be very 
> >> appreciated!
> >>
> >> Thank & Regards,
> >>
> >> Christian
> >>
> >>
> >>
> >> _______________________________________________
> >> talk at x-query.com
> >> http://x-query.com/mailman/listinfo/talk
> >
> >
> > --
> > John Snelson, Oracle Corporation            
> http://snelson.org.uk/john
> > Berkeley DB XML:            
> http://oracle.com/database/berkeley-db/xml
> > XQilla:                                  
> http://xqilla.sourceforge.net
> > _______________________________________________
> > talk at x-query.com
> > http://x-query.com/mailman/listinfo/talk
> 
> 
> 
> 
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk



More information about the talk mailing list