在C#中解析XML数据并显示到列表框 [英] Parsing XML data in C# and show into ListBox
本文介绍了在C#中解析XML数据并显示到列表框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图使用Visual Studio来分析在C#中的XML文件,并显示在ListBox中的数据,但我不知道如何分析它,当我处理一个嵌套的XML文件。
这是从XML文件中的代码:
< XML版本= 1.0编码=UTF-8>?;
<!DOCTYPE根[
<!ELEMENT根(人*)>
<!ELEMENT人(名称)GT;
<!ELEMENT IsMale(#PCDATA)>
<!ELEMENT年龄(#PCDATA)>
<!ELEMENT姓名(#PCDATA)>
<!ELEMENT LikedPerson(名称)GT;
]≥
<根和GT;
<人NAME =鲍勃>
< IsMale>真< / IsMale>
<年龄> 30℃/年龄>
< LikedPerson NAME =尤利娅>
< IsMale>假LT; / IsMale>
<年龄> 32 LT; /年龄>
< / LikedPerson>
< /人>
< /根>
我已经用C#编写的代码成功返回我只有姓名,性别和年龄的每个人,但我不知道怎么写,告诉我还person_liked:
私人无效LoadPersons()
{
XmlDocument的DOC =新的XmlDocument();
doc.Load(Baza_de_cunostinte.xml);
的foreach(在doc.DocumentElement XmlNode的节点)
{
字符串名称= node.Attributes [0] .value的;
INT年龄= int.Parse(节点[时代]的InnerText。);
布尔isMale = bool.Parse(节点[IsMale]的InnerText。);
//人士likedPerson.name = Persons.node.Attributes [0] .value的?
// .....
listBox.Items.Add(新的人(姓名,年龄,isMale,likedPerson));
}
}
私人无效listBox_SelectedIndexChanged(对象发件人,EventArgs五)
{
如果(listBox.SelectedIndex!= -1)
{
propertyGrid1.SelectedObject = listBox.SelectedItem;
}
}
这是Persons.cs的定义:
类人员
{
公共字符串名称{;私人集; }
公众诠释年龄{搞定;私人集; }
公共BOOL IsMale {搞定;私人集; }
公众人物LikedPerson {搞定;私人集; }
公众人物(字符串名称,诠释年龄,布尔isMale,人likedPerson)
{
名称=名称;
年龄=年龄;
IsMale = isMale;
LikedPerson = likedPerson;
}
}
解决方案
XmlSerializer的mySerializer =新的XmlSerializer(typeof运算(人));
//创建一个FileStream或TextReader的读取XML数据。
的FileStream myFileStream =新的FileStream(xmldatafile.xml,FileMode.Open);
变种人=(人)mySerializer.Deserialize(myFileStream);
您还需要不带参数的人员类中添加构造函数。
I am trying to parse a XML file in C# using Visual Studio and show the data in a ListBox, but I don't know how to parse it when I'm dealing with a nested XML file.
This is the code from the XML file:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE root [
<!ELEMENT root (Persons*)>
<!ELEMENT Persons (name)>
<!ELEMENT IsMale (#PCDATA)>
<!ELEMENT Age (#PCDATA)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT LikedPerson (name)>
]>
<root>
<Persons name ="Bob">
<IsMale>true</IsMale>
<Age>30</Age>
<LikedPerson name ="Iulia">
<IsMale>false</IsMale>
<Age>32</Age>
</LikedPerson>
</Persons>
</root>
The code I've written in C# successfully return me only the name, gender and age for every person, but I don't know how to write to show me also the person_liked:
private void LoadPersons()
{
XmlDocument doc = new XmlDocument();
doc.Load("Baza_de_cunostinte.xml");
foreach (XmlNode node in doc.DocumentElement)
{
string name = node.Attributes[0].Value;
int age = int.Parse(node["Age"].InnerText);
bool isMale = bool.Parse(node["IsMale"].InnerText);
// Persons likedPerson.name = Persons.node.Attributes[0].Value ?
// .....
listBox.Items.Add(new Persons(name, age, isMale, likedPerson));
}
}
private void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox.SelectedIndex != -1)
{
propertyGrid1.SelectedObject = listBox.SelectedItem;
}
}
This is the definition of the Persons.cs :
class Persons
{
public string Name { get; private set; }
public int Age { get; private set; }
public bool IsMale { get; private set; }
public Persons LikedPerson { get; private set; }
public Persons(string name, int age, bool isMale, Persons likedPerson)
{
Name = name;
Age = age;
IsMale = isMale;
LikedPerson = likedPerson;
}
}
解决方案
XmlSerializer mySerializer = new XmlSerializer(typeof(Persons));
// Create a FileStream or textreader to read the xml data.
FileStream myFileStream = new FileStream("xmldatafile.xml", FileMode.Open);
var person = (Persons) mySerializer.Deserialize(myFileStream);
You also need to add constructor without parameter for Persons class.
这篇关于在C#中解析XML数据并显示到列表框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文