我是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中的所有数据放入我的列表框中,并使用相同的名称等。
答案 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
类或类似的东西)。