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

Christian Schlaefcke cschlaefcke at wms-network.de
Tue Aug 26 17:12:38 PDT 2008


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






More information about the talk mailing list