LINQ to XML的增、删、改
来源:互联网 发布:爸爸妈妈的网络用语 编辑:程序博客网 时间:2024/05/22 13:30
前言
关于LINQ to XML的用法,已经有很多写得非常好的文章了,本文只是方便自己温习知识所用,所以写得潦草之处,请多包涵。
这次写有关于对XML操作的文章是因为最近几天,自己在学习WPF的同时,练练手,试着写一个桌面的课程表(大三狗也想不出来什么好玩的项目,所以瞎搞搞)。在过程中,遇到了需要存储本地数据的情况,所以选择了使用XML,所以自然就免不了要对XML进行增、删、改了。
使用C#对XML进行操作,有两种方式:XML DOM与LINQ to XML。最开始我使用的是XML DOM的方式,后来发现使用起来,实在是有些冗杂与不便,突然想到C#里还有LINQ这个强大的技术。通过学习和使用LINQ to XML后,衡量两者的优缺点,认为各有各自的好处,在XML结构比较简单,且操作不复杂的情况下,XML DOM使用起来更加简单;而一旦XML结构复杂起来,LINQ to XML就拥有更简洁的代码和更高的可读性。推荐看看MSDN关于两者的比较,学习的时候也很推荐看看MSDN上关于这部分的内容。
XML示例结构
以下是本文中所操作的XML结构,一张课表信息片段。
<?xml version="1.0" encoding="utf-8"?><ClassTableInfo> <Course CourseName="计算机基础"> <ClassRoom>2215</ClassRoom> <TeacherName>NULL</TeacherName> <CourseDayInWeeks> <CourseDay Id="1"> <Day>Fri</Day> <Num>5</Num> </CourseDay> <CourseDay Id="2"> <Day>Wed</Day> <Num>1</Num> </CourseDay> </CourseDayInWeeks> <CourseWeeks> <BeginWeek>1</BeginWeek> <EndWeek>18</EndWeek> <Mod>Double</Mod> </CourseWeeks> </Course></ClassTableInfo>
【解释】
- 上面的XML片段表示计算机基础课,包含的信息有:课程名、教室、教师名、上课日期(星期、节次),上课周期(开始周、结束周、上课模式)。
LINQ to XML的增
现在向XML文件中插入另外一节课的信息,代码如下
private void Add(){ //读取XML文件根节点 XElement root = XElement.Load(@"C:\Users\Rhine\Desktop\info.xml"); //创建新节点信息 XElement addEle = new XElement("ClassTableInfo", new XElement("Course", new XAttribute("CourseName", "大学英语"), new XElement("ClassRoom", "2217"), new XElement("TeacherName", "NULL"), new XElement("CourseDayInWeeks", new XElement("CourseDay", new XAttribute("Id","1"), new XElement("Day", "Fri"), new XElement("Num", "1") ), new XElement("CourseDay", new XAttribute("Id", "2"), new XElement("Day", "Wed"), new XElement("Num", "1") ) ), new XElement("CourseWeeks", new XElement("BeginWeek", "1"), new XElement("EndWeek", 18), new XElement("Mod", "Normal") ) ) ); //添加到目标根节点 root.Add(addEle.Elements()); //保存文件 root.Save(@"C:\Users\Rhine\Desktop\info.xml");}
【解释】
- 代码结构非常清晰,在创建新节点的时候,一点要十分注意观察嵌套的结构,XElement代表元素,XAttribute代表属性,缩进尽量保持与XML文件格式相同,以增加可读性以及更方便维护。
LINQ to XML的删
从XML结构中删除课表信息,代码如下
private void Delete(){ XDocument doc = XDocument.Load(@"C:\Users\Rhine\Desktop\info.xml"); //筛选子节点 IEnumerable<XNode> list = from el in doc.Descendants("Course") where (string)el.Attribute("CourseName") == "大学英语" select el; //删除原节点与其所有的子节点 lst.Remove(); doc.Save(@"C:\Users\Rhine\Desktop\info.xml");}
【解释】
- 这个就没什么好讲的了,重点在于筛选子节点了,这个查看MSDN帮助文档更详细,所以就不细说了,有需要自行查阅。
LINQ to XML的改
从XML结构中,对课表信息进行修改
private void Updata(){ //读入XML(根) XElement root = XElement.Load(@"C:\Users\Rhine\Desktop\info.xml"); //查询课程名为计算机基础的XML信息 XElement courseRoot = (from el in root.Descendants("Course") where el.Attribute("CourseName").Value == "计算机基础" select el).Single(); //修改教室、教师名 (第一层) courseRoot.SetElementValue("ClassRoom", 4519); courseRoot.SetElementValue("TeacherName", "Jack"); //获取CourseDayInWeeks子节点 XElement subCourseRoot = courseRoot.Element("CourseDayInWeeks"); //筛选CourseDayInWeeks节点的子节点(第二层) XElement subSubCourseRoot = (from el in subCourseRoot.Descendants("CourseDay") where el.Attribute("Id").Value == "2" select el).Single(); //修改CourseDay节点的子节点(第三层) subSubCourseRoot.SetElementValue("Day", "Sat"); subSubCourseRoot.SetElementValue("Num", "6"); root.Save(@"C:\Users\Rhine\Desktop\info.xml");}
解释
- 本小结中尤其需要注意的是节点的层次结构,我们经常需要有条件的修改子节点,所以需要利用LINQ to XML提供的查询功能,这使得我们操作更简便,能够组合复杂的查询条件。
- 我相信能够查询并修改第三层子节点的方法,已经足够应对多数的修改情况。
小结
到这里LINQ to XML的大致用法已经介绍完了,基本够用了。LINQ的确是一项非常棒的技术,不得不说C#的确是门优秀的语言!
阅读全文
0 0
- LINQ to XML的增、删、改
- Linq to XML 增、删、改、查
- linq to xml 简单的增、删、改、查、保存xml文件操作
- Linq To Xml (增,删,改,查)
- LINQ to XML实现XML文档的增删改查
- Linq To EF简单的增、删、查、改
- Linq to sql增、删、改、查
- LinQ To SQL(增,删,改,查)
- Linq技术二:Linq to XML及xml增删改查的不同实现方式
- Linq to XML 增删改查
- Linq to Xml 增删查改
- Linq to XML 增删改查
- Linq to XML 增删改查
- Linq to XML增删改查
- Linq to XML 增删改查
- Linq To Xml操作XML增删改查
- Linq to xml实现xml数据增删改查
- LinQ to Sql 分页,增,删,改 实例
- java鬼混笔记:用Spring的ResponseEntity和poi进行excel生成和下载
- LintCode408:二进制求和
- java中String的特点
- Unity3D学习笔记4-五子棋实战项目知识点总结
- codeforces 276A Lunch Rush
- LINQ to XML的增、删、改
- CSS--选择器
- 使用脚本一键安装个人博客
- 十月随笔
- 将序列分解为单独的变量
- FFMPEG Qt视频播放器之同步进阶篇
- 171027-函数的预习【连续第四天】
- 第八周LeetCode
- python PyQt5初级教程hello world