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

John Snelson john.snelson at oracle.com
Tue Nov 6 15:56:44 PST 2007


Hi Wolfgang,

In the absence of XQuery Update, I really like your technique for doing 
this transformation. I think it's actually simpler and easier to read 
than the equivalent XSLT.

John

Wolfgang Meier wrote:
> 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
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk


-- 
John Snelson, Oracle Corporation
Berkeley DB XML:        http://www.oracle.com/database/berkeley-db/xml
XQilla:                                  http://xqilla.sourceforge.net


More information about the talk mailing list