2

定義済みのクラスを使用して XML ドキュメントを List<> に変換しようとしています

私の xml データセット TestData.xml

<Objects>
    <Object ID="1">
        <ItemOne>"Hickory"</ItemOne>
        <ItemTwo>"Dickory"</ItemTwo>
        <ItemThree>"Dock"</ItemThree>
    </Object>

    <Object ID="2">
        <ItemOne>"The"</ItemOne>
        <ItemTwo>"Mouse"</ItemTwo>
        <ItemThree>"Went"</ItemThree>
    </Object>
</Objects>

メインプログラム

class Program
{
    static void Main(string[] args)
    {

        XElement TestData = XElement.Load("TestData.xml");

       List<Test> myTest = new List<Test>(from d in TestData.Descendants("Objects")
                                     select new Test(
                                         d.Element("ItemOne").Value.ToString(),
                                         d.Element("ItemTwo").Value.ToString(),
                                         d.Element("ItemThree").Value.ToString()));

        myTest.ForEach(i => Console.WriteLine("{0} {1} {2}", i.itemOne, i.itemTwo, i.itemThree));

        Console.ReadLine();
    }


}

データを形成しようとしているクラス

class Test
{
    public string itemOne { get; set; }
    public string itemTwo { get; set; }
    public string itemThree { get; set; }
}

出たいです

Hickory Dickory Dock
The Mouse went

しかし、私は何も得られません。LINQ クエリがデータを見つけたように見えますが、それをList<Test>myTest に割り当てることはありません。値はデバッガーで null として表示されます。何が間違っているのかわかりません。

List<Test>オブジェクトをランダムに再配置できるように、XML を変換したいと考えています。int[]配列を使用して「ID」でソートするだけでしたが、配列の実際の長さがわからず、その場で割り当てたいので、list<>. これを達成するための他の提案を受け入れます。

4

2 に答える 2

5

TestData.Descendants("Object")テストせずに、の代わりに書くべきだと思いますTestData.Descendants("Objects")。のパラメーターはDescendants、選択するノードの名前と一致する必要があります。

于 2012-12-06T09:14:16.317 に答える
2

あなたはすでにそのルートにいますObjects

これを行う

from d in TestData.Descendants("Object")
                               --------
于 2012-12-06T09:14:39.947 に答える