C# 读取XML文件
首先添加头文件using System.Xml;
然后,主要是几个步骤:
- 创建 XML 文档操作对象;
- 加载 XML 文档到文档对象中;
- 获取 XML 文档根目录;
- 遍历匹配节点信息,将对象信息放置
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>
输出效果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了