在C#中解析XML数据并显示到列表框 [英] Parsing XML data in C# and show into ListBox

查看:168
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆