Я хочу обновить XML-документ в моей базе данных XML (Marklogic).У меня есть XML в качестве ввода и я хочу заменить каждый узел, который существует в целевом XML.
Если узел не существует, было бы здорово, если бы он был добавлен, но это может быть и другая задача.
Мой XML в базе данных:
<user>
<username>username</username>
<firstname>firstname</firstname>
<lastname>lastname</lastname>
<email>email@mail.de</email>
<comment>comment</comment>
</user>
Значение$ user_xml:
<user>
<firstname>new firstname</firstname>
<lastname>new lastname</lastname>
</user>
Моя функция на данный момент:
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)
};
Прежде всего, я не могу перебрать $user_xml/user
.Если я попытаюсь выполнить итерацию по $user_xml
, я получу исключение
arg1 не относится к типу node ()
Но, может быть, это неправильный подход?
Кто-нибудь может иметь пример кода, как это сделать?