[xquery-talk] replacing a node in in-memory XML

Robert Walpole robert.walpole at devon.gov.uk
Tue Nov 6 16:08:08 PST 2007


Many thanks for your replies.

I don't think I explained myself too well as actually I am aware of
XQuery Update but understand that this is for updating documents stored
within a database rather than just a temporary document fragment
generated by some other Xquery.

Wolfgang's suggestion looks very interesting and certainly works well
for the test case. I will see if I can adapt this for the slightly more
complex real-life situation I have.

Thanks again.
Rob Walpole
Devon Portal Developer
Email robert.walpole at devon.gov.uk
Web http://www.devonline.gov.uk


> -----Original Message-----
> From: Wolfgang Meier [mailto:wolfgangmm at gmail.com] 
> Sent: 06 November 2007 15:31
> To: Robert Walpole
> Cc: talk at xquery.com
> Subject: Re: [xquery-talk] replacing a node in in-memory XML
> 
> 
> Hi Robert,
> 
> > I am trying to figure out the best way to replace a node 
> within an in-memory
> > XML fragment.
> 
> I really like to use the typeswitch statement for things like this:
> 
> declare function t:replace($node as node()) as node() {
>     typeswitch ($node)
>         case $elem as element(services) return
>             <services>
>                 <service value="false">1</service>
>                 <service value="true">2</service>
>                 <service value="false">3</service>
>             </services>
>         case $elem as element() return
>            element { node-name($elem) } {
>                 $elem/@*, for $child in $elem/node() return 
> t:replace($child)
>             }
>         default return $node
> };
> 
> t:replace(doc("test.xml")/*)
> 
> Wolfgang
> 



More information about the talk mailing list