updating multiple nodes in xml with xquery and xdmp:node-replace
        Posted  
        
            by 
                morja
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by morja
        
        
        
        Published on 2010-12-22T15:02:53Z
        Indexed on 
            2010/12/22
            16:54 UTC
        
        
        Read the original article
        Hit count: 317
        
Hi all,
I wnat to update an XML document in my xml database (Marklogic). I have xml as input and want to replace each node that exists in the target xml.
If a node does not exist it would be great if it gets added, but thats maybe another task.
My XML in the database:
<user>
  <username>username</username>
  <firstname>firstname</firstname>
  <lastname>lastname</lastname>
  <email>[email protected]</email>
  <comment>comment</comment>
</user>
The value of $user_xml:
<user>
  <firstname>new firstname</firstname>
  <lastname>new lastname</lastname>
</user>
My function so far:
declare function update-user (
    $username as xs:string,
    $user_xml as node()) as empty-sequence()
{
    let $uri := user-uri($username)
    return
        for $node in $user_xml/user
        return 
            xdmp:node-replace(fn:doc($uri)/user/fn:node-name($node), $node)
};
First of all I cannot iterate over $user_xml/user. If I try to iterate over $user_xml I get "arg1 is not of type node()" exception.
But maybe its the wrong approach anyway?
Does anybody maybe have sample code how to do this?
© Stack Overflow or respective owner