【发布时间】:2016-04-21 00:38:25
【问题描述】:
我正在尝试使用 Visual Studio 解析 C# 中的 XML 文件并在 ListBox 中显示数据,但在处理嵌套的 XML 文件时我不知道如何解析它。
这是来自 XML 文件的代码:
<?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>
我用 C# 编写的代码成功地只为我返回了每个人的姓名、性别和年龄,但我不知道如何编写以显示 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;
}
}
这是 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;
}
}
【问题讨论】:
-
LikedPerson可以出现多次吗? -
你还需要为此更新你的类,因为它现在只能在 CLR 对象中出现一次。
标签: c# xml visual-studio parsing xml-serialization