2

私はこれを書きました:

        XDocument doc = XDocument.Load("test.xml");
        string nodeName = "Mike";
        var query = from el in doc.Descendants("dogs")
                    where (string)el.Attribute("name") == nodeName
                    select
                    "Name: " + nodeName
                    + "\n" + "Breed: " + (string)el.Element("breed")
                    + "\n" + "Sex: " + (string)el.Element("sex");
        foreach (string data in query)
            MessageBox.Show(data);

このデータをロードしたいので、それらを変数に入れて、後でテキストボックス、ラジオボックスなどに配置できるようにします。今のところ、メッセージボックスで表示する方法しか知りません。

4

3 に答える 3

4

これを参照しているかどうかはわかりませんが、試してみることができます:

新しいパブリック クラスを作成します。

    public class XmlResut
    {
        public string Name { get; set; }
        public string Breed { get; set; }
        public string Sex { get; set; } // Maybe a enum would fit this property better
    }

ここで、LINQ を変更して、select new ( http://www.dotnetperls.com/select-new )を使用して、定義されたクラスの新しいインスタンスを作成します。

    XDocument doc = XDocument.Load("test.xml");
    string nodeName = "Mike";
    var query = from el in doc.Descendants("dogs")
                where (string)el.Attribute("name") == nodeName
                select new XmlResult(){
                    Name = nodeName,
                    Breed = (string)el.Element("breed")
                    Sex = (string)el.Element("sex")
                };
    foreach (string data in query)
    {
        Console.WriteLine(data.Name);
        Console.WriteLine(data.Breed);
        Console.WriteLine(data.Sex);
    }
于 2013-07-21T17:59:20.797 に答える
1

Enumerable.ToListを呼び出して、後で使用するためにそれらをコレクションに格納できます。

var result = query.ToList();
foreach (string data in result)
        MessageBox.Show(data);

//result is available for later use
于 2013-07-21T17:47:44.967 に答える
1

さて、私が望んでいたことを達成するためのより良い方法があるかどうかはわかりませんが、うまくいきます.

    public class Data
    {
    public string name { get; set; }
    public string breed { get; set; }
    public string sex { get; set; }
    }

そして方法:

                  XDocument doc = XDocument.Load(@"test.xml");
                  string nodeName = "Mike";
                  var data = from q in doc.Descendants("dogs")
                  where (string)q.Attribute("name") == nodeName
                      select new Data
                      {
                          name = q.Attribute("name").Value,
                          breed = q.Element("breed").Value,
                          sex = q.Element("sex").Value
                      };
                  foreach (var element in data)
                  {
                      textBox1.Text = element.name;
                      comboBox1.Text = element.sex;
                      textBox2.Text = element.breed;
                  }
于 2013-07-23T11:44:51.830 に答える