Я работаю над небольшим проектом для школы. В этом проекте меня просят показать, что я могу использовать различные методы обработки XML. Теперь в моем проекте я работаю с менеджером баз данных Sedna, в котором я храню пользовательские записи, и я хотел бы обновить некоторые из этих пользовательских записей через XQuery (я использую PHP API для отправки запросов в базу данных через PHP API, предоставленный команда разработчиков Sedna). Представьте, что у меня есть следующий контент базы данных для пользовательских записей:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="admin" admin="true">
<email>[email protected]</email>
<password>123456789</password>
<firstname>The</firstname>
<lastname>Stig</lastname>
<gender>male</gender>
<subscriptions>
</subscriptions>
</user>
<user id="prosper" admin="false">
<email>[email protected]</email>
<password>123456789</password>
<firstname>Strange</firstname>
<lastname>Figure</lastname>
<gender>male</gender>
<subscriptions>
</subscriptions>
</user>
</users>
Теперь я намерен обновить, например, запись пользователя Prosper. В этой записи я хотел бы, например, изменить его имя и адрес электронной почты, но оставить все остальное без изменений. Я попытался использовать следующий запрос, но после отправки запроса он изменяет порядок документов в пользовательской записи по какой-то причине, которую я не понимаю (я думаю, что он вставляет узлы атрибутов пользовательской записи как дочерние узлы). Это запрос, который я использую для обновления пользователя:
UPDATE replace $user in doc("users")//user[@id="prosper"]
with
<user>{($user/@*)}
<email>[email protected]</email>
{($user/node()[password])}
<firstname>Familiar</firstname>
<lastname>Figure</lastname>
<gender>male</gender>
{($user/node()[subscriptions])}</user>
Теперь проблема, которую дает мне этот запрос, заключается в том, что когда я пытаюсь запросить информацию о пользователе после обновления, я полагаюсь на тот же порядок дочерних узлов, что и до обновления, но этот запрос меняет порядок.
Есть ли кто-нибудь достаточно квалифицированный, чтобы помочь мне с этой проблемой?
Я благодарю вас за ваше время.