1

次のようなモデルの XML ファイルがあります。

<data>
    <customer>
        <id></id>
        <name></name>
        <model>
            <id></id>
            <name></name>
            <item>
                <id></id>
                <history>
                    <date></date>
                    <location></location>
                </history>
            </item>
            <item>
                <id></id>
                <history>
                    <date></date>
                    <location></location>
                </history>
            </item>
        </model>
        <model>
            <id></id>
            <name></name>
            <item>
                <id></id>
                <history>
                    <date></date>
                    <location></location>
                </history>
            </item>
        </model>
    </customer>
    <customer>
        <id></id>
        <name></name>
        <model>
            <id></id>
            <name></name>
            <item>
                <id></id>
                <history>
                    <date></date>
                    <location></location>
                </history>
            </item>
            <item>
                <id></id>
                <history>
                    <date></date>
                    <location></location>
                </history>
            </item>
        </model>
    </customer>
    <customer>
        <id></id>
        <name></name>
    </customer>
</data>

C# で XPath を使用して、顧客ごとに以下にアクセスする必要があります。

customer/id
customer/name
customer/model/id
customer/model/name
customer/model/item/id
customer/model/item/history/date
customer/model/item/history/location

特定の顧客のデータが存在しない場合、顧客オブジェクトのすべてのフィールドにデータを入力する必要があるため、格納された結果は null になります。XML ファイルが統一されていれば、これは簡単です。私の問題は、各顧客が潜在的に異なる数のモデルおよび項目ノードを持っている可能性がある場合に、各顧客のデータにアクセスすることです。何か案は?

4

1 に答える 1

1

結果が次のタイプのオブジェクトで構成されると仮定します。

Customer, Model, Item and History

それらを入力するための疑似コードは次のとおりです。

  1. すべての/data/customer要素を選択

  2. 1. で選択したノードごとに、次の操作を行います。

  3. オブジェクトの対応するプロパティを選択./idして設定します。./name

  4. 現在の要素のすべての子List<Model>からプロパティを設定します。modelcustomer

  5. ./model現在の要素のすべての子を選択します。

  6. 5. で選択modelした要素ごとに、Model オブジェクトを作成し、そのプロパティを入力します。

  7. 現在の Model オブジェクトについて、現在の要素の./idおよび./name子を選択して、その Id プロパティと Name プロパティを設定します。model

  8. 現在の要素のすべての子List<Item>からプロパティを設定します。itemmodel

  9. ./item現在の要素のすべての子を選択します。

  10. 現在の Item オブジェクトの場合、現在の要素の./id子を選択して Id プロパティを設定します。item

  11. 同様の方法で、Item オブジェクトの History プロパティに、現在の要素の./history子から作成および設定した History オブジェクトを設定します。item

もちろん、XML シリアル化を使用する場合は、これをすべてスキップできます。これについては、http: //msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspxを参照してください。

于 2012-09-16T16:03:19.893 に答える