C#操作XML

在小型项目中,如果用不着使用数据库,但是又有需要保存数据,这个时候有多种选择: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:

  1. version(版本号):仅有 1.0 版本
  2. encoding(编码方式):“utf-8”、“GB2312”……
  3. standalone(该文件是否引用其它外部的文件)。若值是 ”yes” 表示没有引用外部文件,若值是 ”no” 则表示有引用外部文件。默认值是 “yes”。 这里所指的外部文件其实就是查检XML是不是有效的约束文件,或是DTD或是Schema。

C#查询XML

Xpath查询

常用语法:

  1. 根节点/父节点/子节点
    
  2. //节点
    
  3. 根节点/父节点[@父属性=’ value’’]
    
  4. 根节点/父节点[子节点=’value’]
    
  5. 根节点/父节点[子节点=’value’  and  @父节点属性=’value’]
    
  6. 根节点/父节点[子节点=’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 + "']"); 

关于SelectSingleNodeSelectNodes的区别:

  1. SelectSingleNode获取符合条件的第一个节点,返回类型是XmlNode类型;
  2. 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的数据存储。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值