[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