[xquery-talk] Changing the content of an XML document

Piewald, Georg georg.piewald at siemens.com
Tue Sep 2 13:58:24 PDT 2008


Wolfgang [mailto:wolfgang at exist-db.org] wrote:
>> The identity transform will work, and is essentially the 
>> same as the 
>> transformation function that Wolfgang suggests. However I think a 
>> transform expression is easier to understand if eXist 
>> supports XQuery 
>> Update:
>> copy $a := $tree
>> modify replace value of node $a//subnode with
>>   if($condition) then "some text" else "some other text"
>> return $a
> Right now, updates are only supported on documents stored in 
> the db (we 
> directly modify the persistent dom). To use this approach, 
> the document 
> fragment would need to be saved first, which is probably too much 
> overhead for a one-time use.

Ok, XQuery Update looks most convenient to me and I don't mind if I
actually do alter the files stored in the db. But I still can't get it
to work, as I don't really understand the required syntax (as described
at http://exist.sourceforge.net/update_ext.html).

I tried the following, which is obviously wrong:

declare function local:alter() {
let $myfile := doc('/db/myfile.xml')
return update value $myfile/subnode/text() with
	'some other text'

I'm neither sure how to specify the document I want to alter (the doc()
function is surely wrong since it loads the file into memory) nor how to
select the textnode using XPath (is /text() required here?).

Thanks for all the good answers so far!

More information about the talk mailing list