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

Wolfgang wolfgang at exist-db.org
Tue Sep 2 11:26:51 PDT 2008


> Actually I can reduce my question to the following: Assuming I have a
> variable which stores a node-tree like that
> 
> let $tree :=
>   <node>
>     <subnode>
>       some text
>     </subnode>
>   </node>
> 
> In reality $tree is the entire XML file which I want to send back to the
> client. Now, depending on some conditions I want to change the content
> of <subnode> "some text" to "some other text", before sending it. I
> don't actually want to alter the file in the database, just the message
> that I'm sending.

Ok, I see. If you just need to filter out or change a few nodes, I would 
probably write a simple transformation function, e.g.:

declare function f:filter-entry($node as node(), $newText as xs:string) {
     typeswitch ($node)
         case $subnode as element(subnode) return
             <subnode>{$newText}</subnode>
         case $elem as element() return
             element { node-name($elem) } {
                 $elem/@*, for $child in $elem/node() return 
f:filter-entry($child, $newText)
             }
         default return
             $node
};

Wolfgang


More information about the talk mailing list