来自NodeList xml的C#保存对象

时间:2017-11-30 23:39:18

标签: c# xml

我有这样的xml:

public static void SendTheLoadedPerson(ObservableCollection<ObservableCollection<Person>> list)
{
    XmlDocument xmlDoc = new XmlDocument();
    XDocument doc = XDocument.Load(path);
    XmlElement root = xmlDoc.DocumentElement;
    XmlNodeList nodes = xmlDoc.DocumentElement.ChildNodes;
    XmlNodeList nodes2 = root.SelectNodes("//Pepole/PersonList/Person");

    foreach (XmlNode node in nodes)
    {
        var items = (from r in doc.Root.Elements("Person")

        select new Person()
        {
            Name = (string)r.Element("Name"),
            Surname = (string)r.Element("Surname"),
            City = (string)r.Element("City")
        }).ToList();

        list.Add(new ObservableCollection<Person>(items));
    }
}

方法:

{{1}}

现在我遇到了一个问题,因为XmlNode返回正常 - 3 Personlist和Person内部,但我想将count of nodes asigne分别指向ObservableCollection&gt;名单。 我的意思是:当PersonList包含2个人时,我想向列表发送2个人,作为一个计数,很难向我解释所以它应该是这样的: template

我将非常感谢任何提示/帮助!

1 个答案:

答案 0 :(得分:0)

这是您第四次发布相同的问题。最新发布的xml略有不同。以下是使用最新xml并添加计数的其中一个帖子中提供的解决方案。使用Elements而不是Descendants,您的解决方案会更复杂。 :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            var results = doc.Descendants("PersonList").Select(x => new {
                count = x.Elements("Person").Count(),
                people = x.Elements("Person").Select(y => new {
                    name = (string)y.Element("Name"),
                    surname = (string)y.Element("Surname"),
                    city = (string)y.Element("City")
                }).ToList()
            }).ToList();

        }
    }
}