1

私は学校のための小さなプロジェクトに取り組んでいます。このプロジェクトでは、私が XML のさまざまな処理技術を使用できることを示すよう求められています。現在、私のプロジェクトでは、ユーザー レコードを保持する Sedna データベース マネージャーを使用しており、XQuery を介してこれらのユーザー レコードの一部を更新したいと考えています (PHP API を使用して、提供された PHP Api を介してクエリをデータベースに送信します)。セドナ開発チーム)。ユーザー レコード用に次のデータベース コンテンツがあるとします。

<?xml version="1.0" encoding="UTF-8"?>

<users>
    <user id="admin" admin="true">
        <email>admin@admin.com</email>
        <password>123456789</password>
        <firstname>The</firstname>
        <lastname>Stig</lastname>
        <gender>male</gender>
        <subscriptions>
        </subscriptions>
    </user>
    <user id="prosper" admin="false">
        <email>prosper@localhost.com</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>strange.figure@localhost.com</email>
{($user/node()[password])}
<firstname>Familiar</firstname>
<lastname>Figure</lastname>
<gender>male</gender>
{($user/node()[subscriptions])}</user>

さて、このクエリが私に与える問題は、更新後にユーザーの情報を尋ねようとすると、更新前と同じ子ノードの順序に依存していますが、このクエリは順序を変更することです。

この問題を解決するのに十分なスキルを持った人はいますか?

お時間をいただきありがとうございます。

4

1 に答える 1

0

ノードを取得したい場合passwordは、XPath を変更する必要があります (現在の式{($user/node()[password])}は、あなたが考えているものではありません)。

{$user/password}

についても同じですsubscriptions

{$user/subscriptions}

述語を含む 1 つの式として記述できます。

{$user/node()[local-name(.) = ('password', 'subscriptions')]}
于 2011-08-16T09:59:31.253 に答える