c# - C#解析XML数据并显示到ListBox

标签 c# xml visual-studio parsing xml-serialization

我正在尝试使用 Visual Studio 在 C# 中解析 XML 文件并在列表框中显示数据,但在处理嵌套的 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# 编写的代码成功地只返回了每个人的姓名、性别和年龄,但我不知道如何写来显示我喜欢的人:

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;
    }
}

最佳答案

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);

您还需要为 Persons 类添加不带参数的构造函数。

关于c# - C#解析XML数据并显示到ListBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34810725/

相关文章:

c# - 来自 Windows 应用程序 c# 的图像保存问题

c# - 最佳表/枚举驱动的方法调用系统

java - 使用 @XmlJavaTypeAdapter 映射 Map 时的 JAXB 和空命名空间

c++ - 由于外部依赖性,StartupTask.cpp 构建失败

c# - 如何从 Visual Studio 2012 项目降级到 Visual Studio 2008

c# - 3层架构问题

c# - 如何从 C# 显示文件的属性对话框?

php - 解析 XML 并回显结果

xml - 使用 xpath 从 postgres 中的 XML 列中提取数据

.net - 安装 VS2012(包括 MVC4)会破坏现有的 ASP.NET MVC 3 应用程序