在小型项目中,如果用不着使用数据库,但是又有需要保存数据,这个时候有多种选择:text、json、xml、excel……但是text没有任何格式,所以json、xml、excel就有了用处。
有人说xml是一种有些过时的技术,我不这样认为。只有适用的技术,和能够选择合适技术的人。今天讲讲如何在C#中使用xml存储数据。
文章目录
XML简介
XML是一种可扩展标记语言,英文名为:Extensible Markup Language。
XML具有很多优势:简单易懂,格式标准,任何语言都内置了XML的分析引擎,不用单独进行文件解析引擎的编写,数据具有格式、体积小、操作简单等,只要有html的基础,那么上手XML也会很快,毕竟二者有很多相识之处:二者都是由标签组成。不同的是,HTML是为了展示数据,XML是为了存储数据。
当然,XML和HTML还是有一些区别的:
- XML所有标签必须闭合,HTML的部分标签不必闭合,如:img标签
- XML标签是可扩展标签,HTML标签是固定标签
- XML只有1.0版本,有严格固定的版本标识,HTML从1到5有多个版本,各个版本之间的版本标识各不相同。
在C#中创建XML文件
想要在C#中使用XML,首先需要引入System.Xml
命名空间,同时为了能够保存XML文件,需要引入System.IO
命名空间。
//1.创建Xml文件模型对象
XmlDocument xd = new XmlDocument();
//2.创建Xml头部文件声明
XmlDeclaration xdt = xd.CreateXmlDeclaration("1.0", "utf-8", null);
xd.AppendChild(xdt);
//3.创建唯一的Xml根节点
XmlElement System = xd.CreateElement("System");
//3.1给根节点添加属性
System.SetAttribute("name", "学生管理系统");
//4.将根节点添加到文档对象模型中去
xd.AppendChild(System);
//5.创建二级节点
XmlElement Students = xd.CreateElement("Students");
System.AppendChild(Students);
//6.创建三级节点
XmlElement student = xd.CreateElement("student");
student.SetAttribute("id", "0000000001");
//将三级节点插入到二级节点“Students”中
Students.AppendChild(student);
XmlElement stuName = xd.CreateElement("stuName");
stuName.InnerText = "李";
XmlElement stuCls = xd.CreateElement("stuCls");
stuCls.InnerText = "C#";
student.AppendChild(stuName);
student.AppendChild(stuCls);
XmlElement student2 = xd.CreateElement("student");
student2.SetAttribute("id", "0000000002");
//将三级节点插入到二级节点“Students”中
Students.AppendChild(student2);
XmlElement stuName2 = xd.CreateElement("stuName");
stuName2.InnerText = "李2";
XmlElement stuCls2 = xd.CreateElement("stuCls");
stuCls2.InnerText = "C#1班";
student2.AppendChild(stuName2);
student2.AppendChild(stuCls2);
xd.Save("1.xml");
Console.WriteLine("保存成功");
Console.ReadKey();
关于创建Xml头部标识方法CreateXmlDeclaration:
- version(版本号):仅有 1.0 版本
- encoding(编码方式):“utf-8”、“GB2312”……
- standalone(该文件是否引用其它外部的文件)。若值是 ”yes” 表示没有引用外部文件,若值是 ”no” 则表示有引用外部文件。默认值是 “yes”。 这里所指的外部文件其实就是查检XML是不是有效的约束文件,或是DTD或是Schema。
C#查询XML
Xpath查询
常用语法:
-
根节点/父节点/子节点
-
//节点
-
根节点/父节点[@父属性=’ value’’]
-
根节点/父节点[子节点=’value’]
-
根节点/父节点[子节点=’value’ and @父节点属性=’value’]
-
根节点/父节点[子节点=’value’ or @父节点属性=’value’]
例:
//查询Id为指定Id的学生节点
1) XmlNode studentNode = XML.SelectSingleNode("System/Students/student[@id=" + id + "]");
//查询班级为指定班级的学生节点集合
2) XmlNodeList studentsNodeList = XML.SelectNodes("System/Students/student[clsName='" + clsName + "']");
关于SelectSingleNode
和SelectNodes
的区别:
- SelectSingleNode获取符合条件的第一个节点,返回类型是XmlNode类型;
- SelectNodes获取符合条件的所有节点值,返回类型是XmlNodeList,是一个集合;
更新
先找到需要更新的节点,对节点里面的值重新复制,最后对文件进行保存.
节点内容更新
1) studentNode.SelectSingleNode("clsName").InnerText = value;
2) studentNode.SelectSingleNode("clsName").InnerXml=value;
节点属性更新
StudentsNode.Attributes["num"].Value = value;
删除
删除方式:
- 从当前节点获取父节点,从父节点删除当前节点
- 从父节点直接删除子节点
//从当前节点获取父节点,从父节点删除当前节点
studentNode.ParentNode.RemoveChild(studentNode);
//从父节点直接删除子节点
studentsNode.RemoveChild(studengNode);
特别注意
进行添加、修改、删除操作后,一定要对操作的XML文档进行保存
结尾
本篇博客是在给别人讲解C#操作XML文档后,通过整理教案整理的,里面后很多的细节并没有一一在教案里描述,所以 本文略显简陋,所幸讲解后的代码demo有所 保留,对本文有兴趣了解,但是未能全部解惑的同学可以查看代码demo,点此下载,代码demo有三个项目,分别是创建XML文档、简单增删改查、基于XML存储数据的三层增删改查。
C#操作XML文档有多种方式,本文讲述的只是基于DOM的对XML的操作,以后会整理关于其他方式的操作,同时将会编写基于json、excel的数据存储。