C# 读取XML文件

首先添加头文件using System.Xml;

然后,主要是几个步骤:

  1. 创建 XML 文档操作对象;
  2. 加载 XML 文档到文档对象中;
  3. 获取 XML 文档根目录;
  4. 遍历匹配节点信息,将对象信息放置 list 集合中。

Student.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace XMLOperateSelfExercise
{
    class Student
    {
        public string StuName { get; set; }
        public int StuAge { get; set; }
        public string Gender { get; set; }
        public string ClassName { get; set; }      
    }
}

Form1.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

// 添加操作 XML 的头文件
using System.Xml;

namespace XMLOperateSelfExercise
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.dataGridView1.RowHeadersVisible = false;
        }

        // 加载XML文件
        private void btnLoadXML_Click(object sender, EventArgs e)
        {
            // [1] 创建 XML 文档操作对象
            XmlDocument objDoc = new XmlDocument();
            // [2] 加载 XML 文档到文档对象中
            objDoc.Load(@"./stuInfo.xml");
            // [3] 获取 XML 文档根目录
            XmlNode rootNode = objDoc.DocumentElement;
            List<Student> stuNodeInfo = new List<Student>();// 创建集合对象,用来存放对象信息

            foreach (XmlNode item in rootNode.ChildNodes) {
                if (item.Name == "Student") {
                    Student objStu = new Student();
                    foreach (XmlNode stuInnerNode in item) {
                        switch (stuInnerNode.Name) {
                            case "StuName":
                                objStu.StuName = stuInnerNode.InnerText;
                                break;
                            case "StuAge":
                                objStu.StuAge = Convert.ToInt32(stuInnerNode.InnerText);
                                break;
                            case "Gender":
                                objStu.Gender = stuInnerNode.InnerText;
                                break;
                            case "ClassName":
                                objStu.ClassName = stuInnerNode.InnerText;
                                break;
                        }
                    }
                    stuNodeInfo.Add(objStu);
                }
            }

            this.dataGridView1.DataSource = stuNodeInfo;
        }

        // 加载版本信息
        private void btnVersion_Click(object sender, EventArgs e)
        {
            // 创建 XML 读取器
            XmlTextReader xmlTReader = new XmlTextReader(@"./StuInfo.xml");

            string versionInfo = string.Empty;

            // 循环查询
            while(xmlTReader.Read()) {
                if (xmlTReader.Name == "Version") {
                    versionInfo = "版本:" + xmlTReader.GetAttribute("vNo") + "发布时间:" + xmlTReader.GetAttribute("pTime");
                    break;
                }
            }
            MessageBox.Show(versionInfo, "版本信息");
        }
    }
}

StuInfo.xml:

<?xml version="1.0" encoding="utf-8" ?>
<Students>
  <Student>
    <StuName>令狐冲</StuName>
    <StuAge>19</StuAge>
    <Gender></Gender>
    <ClassName>1班</ClassName>
  </Student>
  <Student>
    <StuName>岳灵珊</StuName>
    <StuAge>16</StuAge>
    <Gender></Gender>
    <ClassName>2班</ClassName>
  </Student>
  <Student>
    <StuName>岳不群</StuName>
    <StuAge>40</StuAge>
    <Gender></Gender>
    <ClassName>3班</ClassName>
  </Student>
  <Student>
    <StuName>乔峰</StuName>
    <StuAge>23</StuAge>
    <Gender></Gender>
    <ClassName>4班</ClassName>
  </Student>
  <Student>
    <StuName>韦小宝</StuName>
    <StuAge>20</StuAge>
    <Gender></Gender>
    <ClassName>5班</ClassName>
  </Student>
  <DataInfo>
    <Version vNo="1.2" pTime="2018-10-22">数据版本信息</Version>
  </DataInfo>
</Students>

输出效果:

posted @   double64  阅读(1777)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示