如何使用XDocument获取属性并将其添加到列表

时间:2015-06-15 10:25:00

标签: c# xml winforms list

我正在尝试从XML文件加载数据并将其添加到List中。 XML文件如下所示:

XML File

这是我的代码:

    public void LoadPayments(List<List<string>> list1, List<List<string>> list2)
    {
        try
        {
            if (File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "RentData.xml")))
            {
                int count = 0;
                XDocument doc;
                using (var reader = XmlReader.Create(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "RentData.xml")))
                {
                    doc = XDocument.Load(reader);
                    foreach (var dc in doc.Descendants("Rent"))
                    {
                        foreach (var dm in doc.Descendants("Month-" + count))
                        {
                            foreach (var dm1 in doc.Descendants("Payments"))
                            {
                               list1.Add(new List<string>() { dm.Attribute("Rent").Value, dm.Attribute("Water").Value, dm.Attribute("Electricity").Value, dm.Attribute("Internet").Value });
                               list2.Add(new List<string>() { dm.Attribute("Rent").Value, dm.Attribute("Water").Value, dm.Attribute("Electricity").Value, dm.Attribute("Internet").Value });
                            }
                        }
                        count++;
                    }
                    reader.Dispose();
                    reader.Close();
                }
            }
            else
            {
                File.Create(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "RentData.xml"));
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }

我意识到目前代码非常混乱,但我一直在尝试各种方法来使其工作。如果有人可以帮我弄清楚如何获取属性并将它们添加到两个不同的列表,将非常感谢!谢谢!

1 个答案:

答案 0 :(得分:0)

您尝试获取的属性不是Payments元素的属性。你需要更深层次才能获得它们。试试这个:

......
doc = XDocument.Load(reader);
var data = doc.Root
              .Elements()
              .Elements("Payments");
foreach(var d in data)
{
    var patti = d.Element("Patti");
    list1.Add(new List<string>()
             { 
                patti.Attribute("Rent").Value, 
                patti.Attribute("Water").Value, 
                patti.Attribute("Electricity").Value, 
                patti.Attribute("Internet").Value 
             });

    var mike = d.Element("Mike");
    list2.Add(new List<string>() 
             { 
                mike.Attribute("Rent").Value, 
                mike.Attribute("Water").Value, 
                mike.Attribute("Electricity").Value, 
                mike.Attribute("Internet").Value 
             });
}
......