У меня есть документ XML следующим образомкак заменить значение атрибута с помощью XQuery
<users>
<user test="oldvalue">
<userid>sony</userid>
<name>vijay</name>
</user>
</users>
Я пытаюсь написать XQuery к 1) найти пользователя с указанным идентификатором пользователя - сони 2) измените значение атрибута «test» данного пользователя на «newvalue».
Я пытаюсь следующее: (где DOC_NAME = имя XML-документа, идентификатор пользователя = Sony)
declare variable $doc_name as xs:string external;
declare variable $userid as xs:string external;
let $users_doc := doc($doc_name)/users
let $old := $users_doc/user[userid=$userid]/@test="oldvalue"
let $new := $users_doc/user[userid=$userid]/@test="newvalue"
return replace node $old with $new
я вижу следующее сообщение об ошибке: [XUTY0008] одиночный элемент, текст, атрибут, комментарий или Ожидается, что pi заменит цель.
Как это исправить?
let $ old: = $ users_doc/user [userid = $ userid]/@ test let $ new: = $ users_doc/user [userid = $ userid]/@ test {'newvalue'} return replace node $ old с $ new приводит к ошибке: [XPST0003] Ожидание выражения «где», «порядок» или «возвращение». Я также попытался вернуть атрибут $ old с помощью $ new. Обратите внимание, что в документе xml может быть несколько пользователей, каждый из которых имеет атрибут test. – sony
@sony: Проверьте мое редактирование. – 2010-11-12 21:49:49
let $ new: = attribute test {'newvalue'} - Я не уверен, к чему это относится. Что такое тест атрибута? В одном документе было бы несколько атрибутов теста, учитывая, что будет несколько пользователей. Вы имеете в виду $ new: = $ users_doc/user [userid = $ userid]/@ test {'newvalue'}. Я не уверен, что вы редактировали. – sony