将xml文件加载到列表框中c#

时间:2017-06-29 14:08:02

标签: c# xml

我是c#的新手,我正在尝试将xml文件中的某些数据加载到不同的列表框中。我尝试了一些东西,但似乎没有什么对我有用。我设法将列表框中的数据保存到xml文件中。

我试着写一些代码试图将xml文件加载到列表框中:

    private void OnLoad()
            {
                OpenFileDialog load = new OpenFileDialog();

                //load.InitialDirectory = "c:\\";
                load.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
                load.FilterIndex = 2;
                load.RestoreDirectory = true;

                if (load.ShowDialog() == true)
                {
                    using (StreamReader stream = new StreamReader(load.OpenFile())) 
                    { 
                        try
                        {
                            XmlDocument parsed = new XmlDocument(); 
                            parsed.Load(stream);
                            XmlNodeList foodList = parsed.GetElementsByTagName("Food"); 
                            for(int i = 0; i > foodList.Count; i++)
                            { 
                               string var = elemList[i].Attributes["FoodName"].Value; 
                               lb1.Items.Add(var); 

                            }
                        catch(XmlException exception)
                        {
                            MessageBox.Show("The XML could not be read." + exception);
                            XmlDocument empty = new XmlDocument(); 
                        }
                    }
                }

            }

我的XML文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ListBox>
    <lb1>
        <Food FoodName="*****" />
    </lb1>
    <lb2>
        <Variable FoodName="****"/>
    </lb2>
</ListBox>

lb1和lb2是不同的列表框。我希望将lb1中的所有数据放入我的列表框中,并使用相同的名称,并将lb2中的所有数据放入我的列表框中,并使用相同的名称等。

1 个答案:

答案 0 :(得分:2)

问题是您正在将VariableItem对象序列化为XML,但在从文件加载时,您尝试添加XmlDocument类型的对象:

 XmlDocument parsed = new XmlDocument(); 
 parsed.Load(stream);
 InputsMV.Items.Add(parsed); //Problem line

您需要将parsed对象中包含的数据反序列化为VariableItem类型的对象,然后将这些对象添加到列表中。这样的事情(或多或少,根据你正在做的事情调整代码):

 XmlDocument parsed = new XmlDocument(); 
 parsed.Load(stream);
 IEnumerable<VariableItem> items = LoadFromXml(parsed);
 foreach(var item in items)
 {
      InputsMV.Items.Add(item); 
 }

我还建议将序列化问题分成它自己的类(有VariableItemXmlSerializer类或类似的东西)。