2

XDocument を LINQ to XML と組み合わせて使用​​して、xml ファイルに読み込み、クラスにデータを入力しています。

しかし今、私は自分のプログラムがすべてのサイズの XML ドキュメントを処理できるようにすることを任されています。つまり、XML リーダーを使用する必要があり、現時点では、XMLReader を操作してクラスにデータを入力することに頭を悩ませています。

現在、私は以下のクラスを設定しています:

 public class DataRecord
  {
    private List<Fields> field = new List<Fields>();

    public string ID { get; set; }
    public string TotalLength { get; set; }

    public List<Fields> MyProperty
    {
      get { return field; }
      set { field = value; }
    }

  }

  internal class Fields
  {
    public string name { get; set; }
    public string startByte { get; set; }
    public string length { get; set; }
  }

}

クラスにデータを入力するために私からのデータを提供するようにxmlreaderを強制するステートメントを切り替えようとしています。例えば:

using (XmlReader reader = XmlReader.Create(filename))
  {
    while (reader.Read())
    {
      switch (reader.NodeType)
      {
        case XmlNodeType.Element:
          switch (reader.Name)
          {
            case "DataRecord":
              var dataaa = new dataclass.DataRecord();
              break;
          }
         break;
      }
    }
  }

しかし、これは例だと言ったように、年齢を検索して答えを見つけようとしましたが、混乱しています。うまくいけば、誰かが私の問題を解決してくれます。

4

1 に答える 1

5

を使用XmlReaderしてドキュメント内を移動できますが、各要素を次のようにロードしますXElement.

以下に短い例を示します。

using System;
using System.Xml;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        using (var reader = XmlReader.Create("test.xml"))
        {
            while (reader.ReadToFollowing("foo"))
            {
                XElement element = XElement.Load(reader.ReadSubtree());
                Console.WriteLine("Title: {0}", element.Attribute("title").Value);
            }
        }
    }
}

サンプル XML を使用:

<data>
  <foo title="x" /><foo title="y">asd</foo> <foo title="z" />
</data>

(コンテンツを含む要素、要素間にスペースがない要素、および要素間にスペースがある要素を処理できることを示すためだけに、少し一貫性がありません。)

次に、明らかにループ内で必要なことを行いますXElement- からクラスのインスタンスを作成する方法がすでにある場合はXElement、それを呼び出してオブジェクトを使用するだけで済みます。

于 2013-04-05T12:02:07.157 に答える