4.Linq To Xml操作XML增删改查
转自https://www.cnblogs.com/wujy/p/3366812.html
对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容;本文将简单运用Linq TO Xml对XML进行操作,主要讲解对XML的创建、加载、增加、查询、修改以及删除;重点在于类XDocument、类XElement;本实例是在控制台程序运行,所以对加载的XML文件路径要注意,若XML文件不是代码自运创建时要设置其“复制到输出目录”-始终复制
1:首先看一下实例要加载的XML文件格式:

- <?xml version="1.0" encoding="utf-8" standalone="yes"?>
- <Root>
- <User>
- <UserID>1</UserID>
- <UserName>踏浪帅</UserName>
- </User>
- <User>
- <UserID>2</UserID>
- <UserName>wujunyang</UserName>
- </User>
- <User>
- <UserID>3</UserID>
- <UserName>cnblogs</UserName>
- </User>
- </Root>

2:[加载XML]加载XML文件的内容,假如XML文件不存在则创建一个CreateXmlFile(XmlFile):

- string XmlFile=Directory.GetCurrentDirectory()+"//XmlFile//UserXmlFiles.xml";
- if (!File.Exists(XmlFile))
- {
- CreateXmlFile(XmlFile);
- }
- XDocument xdocument = XDocument.Load(XmlFile); //asp.net XDocument.Load(Server.MapPath("//XmlFile//UserXmlFile.xml"));
- Console.WriteLine("--------------开始遍历XML节点内容--------------");
- var Users = from userInfo in xdocument.Element("Root").Elements() select new { UserID = userInfo.Element("UserID").Value, UserName = userInfo.Element("UserName").Value };
- foreach (var item in Users)
- {
- Console.WriteLine(string.Format("用户ID为:{0};名字为:{1}", item.UserID, item.UserName));
- }

运行结果:
3:[创建XML]上面提到假如XML文件不存在则创建一个,并增加我们想要的节点内容

- /// <summary>
- /// 生成XML文件
- /// </summary>
- /// <param name="XmlFile">XML保存的路径</param>
- private static void CreateXmlFile(string XmlFile)
- {
- XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), CreateXElement());
- xdoc.Save(XmlFile);
- }
- private static XElement CreateXElement()
- {
- XElement root = new XElement("Root",new XElement("User",new XElement("UserID","1"),new XElement("UserName","踏浪帅")),
- new XElement("User", new XElement("UserID", "2"), new XElement("UserName", "wujunyang")),
- new XElement("User", new XElement("UserID", "3"), new XElement("UserName", "cnblogs")));
- return root;
- }

4:[带条件遍历]带条件进行查询出想要的结果,这边我们查找UserID的值大于1

- Console.WriteLine("--------------开始带条件遍历XML节点内容--------------");
- var UserForWhere = from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) > 1 select new { UserID = userInfo.Element("UserID").Value, UserName = userInfo.Element("UserName").Value };
- foreach (var item in UserForWhere)
- {
- Console.WriteLine(string.Format("用户ID为:{0};名字为:{1}", item.UserID, item.UserName));
- }

运行结果:
5:[插入]往XML插入我们想要的值,此处我们再增加一个
- Console.WriteLine("--------------往XML文件里再插入一个节点的内容--------------");
- XElement InsertRoot = new XElement("User", new XElement("UserID", "4"), new XElement("UserName", "厦门"));
- xdocument.Element("Root").Add(InsertRoot);
- xdocument.Save(XmlFile);
- Console.WriteLine("插入节点成功");
运行结果:
XML文件内容变成:

- <?xml version="1.0" encoding="utf-8" standalone="yes"?>
- <Root>
- <User>
- <UserID>1</UserID>
- <UserName>踏浪帅</UserName>
- </User>
- <User>
- <UserID>2</UserID>
- <UserName>wujunyang</UserName>
- </User>
- <User>
- <UserID>3</UserID>
- <UserName>cnblogs</UserName>
- </User>
- <User>
- <UserID>4</UserID>
- <UserName>厦门</UserName>
- </User>
- </Root>

6:[更新]对节点下某个值进行更新,通过条件进行查找出来再更新

- Console.WriteLine("--------------更新XML文件里节点的内容--------------");
- XElement UserUpdate = (from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) == 3 select userInfo).SingleOrDefault();
- if (UserUpdate != null)
- {
- UserUpdate.Element("UserName").Value = "www.cnblogs.com/wujy";
- xdocument.Save(XmlFile);
- }
- Console.WriteLine("更新节点成功");

运行结果:
7:[删除]针对某个条件对XML中的某一项进行删除

- Console.WriteLine("--------------删除XML文件里节点的内容--------------");
- XElement UserDelete = (from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) == 2 select userInfo).SingleOrDefault();
- if (UserDelete != null)
- {
- UserDelete.Remove();
- xdocument.Save(XmlFile);
- }
- Console.WriteLine("删除节点成功");

运行结果:
8:除的上面提到值还有一种是属性如下面:

- <?xml version="1.0" encoding="utf-8" standalone="yes"?>
- <Root>
- <User UserName="wujy" PassWord="76543" Age="30" />
- <User UserName="cnblogs" PassWord="23456" Age="26" />
- <User UserName="踏浪帅" PassWord="4567" Age="34" />
- </Root>

最近碰到一字符串的XML,接着我们就实现把它转化为一个实体:

- public class User
- {
- public string UserName { get; set; }
- public string PassWord { get; set; }
- public string Age { get; set; }
- }


- private static void CreateXmlFile(string XmlFile)
- {
- XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), CreateXElement());
- xdoc.Save(XmlFile);
- }
- private static XElement CreateXElement()
- {
- XElement root = new XElement("Root", new XElement("User", new XAttribute("UserName", "wujy"), new XAttribute("PassWord", "76543"), new XAttribute("Age", "30")),
- new XElement("User", new XAttribute("UserName", "cnblogs"), new XAttribute("PassWord", "23456"), new XAttribute("Age", "26")),
- new XElement("User", new XAttribute("UserName", "踏浪帅"), new XAttribute("PassWord", "4567"), new XAttribute("Age", "34")));
- return root;
- }
- public static List<User> DindDB()
- {
- List<User> list = new List<User>();
- XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), CreateXElement());
- string XmlStr = xdoc.ToString();
- byte[] ARRAY=Encoding.UTF8.GetBytes(cleanStringEmpty(XmlStr));
- MemoryStream stream=new MemoryStream(ARRAY);
- StreamReader READER=new StreamReader(stream);
- XDocument xmdo = XDocument.Load(READER);
- var ResultUsers = from userInfo in xmdo.Elements("Root").Elements("User") select new { UserName = userInfo.Attribute("UserName").Value, PassWord = userInfo.Attribute("PassWord").Value, Age = userInfo.Attribute("Age").Value };
- foreach (var item in ResultUsers)
- {
- User model = new User();
- model.UserName = item.UserName;
- model.PassWord = item.PassWord;
- model.Age = item.Age;
- list.Add(model);
- }
- return list;
- }
- private static string cleanStringEmpty(string str)
- {
- if (!string.IsNullOrEmpty(str))
- {
- StringBuilder sb = new StringBuilder();
- string[] newStr = str.ToString().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
- for (int i = 0; i < newStr.Length; i++)
- {
- sb.Append(newStr[i].Trim());
- }
- return sb.ToString();
- }
- else
- {
- return null;
- }
- }

4.Linq To Xml操作XML增删改查的更多相关文章
- java对xml文件做增删改查------摘录
java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...
- js操作indexedDB增删改查示例
js操作indexedDB增删改查示例 if ('indexedDB' in window) { // 如果数据库不存在则创建,如果存在但是version更大,会自动升级不会复制原来的版本 var r ...
- MySQL数据分析(16)— 数据操作之增删改查
前面我们说学习MySQL要从三个层面,四大逻辑来学,三个层面就是库层面,表层面和数据层面对吧,数据库里放数据表,表里放数据是吧,大家可以回忆PPT中jacky的这图,我们已经学完了库层面和表层面,从本 ...
- Redis简单的数据操作(增删改查)
#Redis简单的数据操作(增删改查): 字符串类型 string 1. 存储: set key value 127.0.0.1:6379> set username zhangsan OK 2 ...
- 使用dom4j对xml文件进行增删改查
1.使用dom4j技术对dom_demo.xml进行增删改查 首选要下载dom4j的jar包 在官网上找不到,网上搜索了一下在这个链接:http://sourceforge.net/projects/ ...
- Linq 数据库操作(增删改查)
Linq数据库增删改查 Linq是一种查询语言,集成包含在formwork中,包含在C#语言中,它的作用是降低查询的门槛,提高开发效率,是我们必须掌握的技术之一,下面是我自己对linq数据库操作的方法 ...
- XML(五)dom4j增删改查
book2.xml <? xml version="1.0" encoding="UTF-8"?> <书架> <书> < ...
- 通过Java代码实现对数据库的数据进行操作:增删改查
在写代码之前,依然是引用mysql数据库的jar包文件:右键项目-构建路径-设置构建路径-库-添加外部JAR 在数据库中我们已经建立好一个表xs :分别有xuehao xingming xue ...
- LinQ 创建连接、简单增删改查
LINQ--语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操 ...
- spring boot快速入门 4: jpa数据库操作 实现增删改查
spring boot jpa逆向生成表 简单实例: 第一步:pom文件: <?xml version="1.0" encoding="UTF-8"?&g ...
随机推荐
- rtmp_specification_1.0
Copyright Adobe Systems Incorporated H. Parmar, Ed. M. Thornburgh, Ed. Adobe December 21, 2012 Adobe ...
- 深入玩转K8S之利用Label控制Pod位置
首先介绍下什么是Label? Label是Kubernetes系列中一个核心概念.是一组绑定到K8s资源对象上的key/value对.同一个对象的labels属性的key必须唯一.label可以附加到 ...
- EF的 NoTracking 的一些记录
NoTracking官方解释 跟踪与非跟踪查询 跟踪行为可控制 Entity Framework Core 是否将有关实体实例的信息保留在其更改跟踪器中. 如果已跟踪某个实体,则该实体中检测到的任何更 ...
- 【快捷键】【idea】的eclipse格式化快捷键Ctrl+Shift+F与win10冲突的解决方法
1.多按一个win键解决[Ctrl+Shift+Win+F],试了一下,只要F键最后按就可以了 注意:win键就是微软的logo键 2.先按Ctrl+F,然后松开F键[注意不要松开Ctrl键],再按S ...
- HTML5自定义select标签样式的方法
HTML5自定义select标签样式的方法 -webkit-appearance: none; 这个东西可以隐藏箭头 不过手机端就直接 设置透明度为0就行了(如果这种做法比前面个要麻烦点 毕竟还要对他 ...
- Linux基础(11)原始套接字
一边接收函数返回一边判断返回值时一定要把接收的优先级加()提高再去判断 例 if((sockfd = socket()) < 0) 问题: 如何实现SYN扫描器扫描端口 , 比如AB两个设备要进 ...
- springboot+mybatis实现数据库的读写分离
介绍 随着业务的发展,除了拆分业务模块外,数据库的读写分离也是常见的优化手段.方案使用了AbstractRoutingDataSource和mybatis plugin来动态的选择数据源选择这个方案的 ...
- python代码执行SQL文件(逐句执行)
一.简介 关于Python如何连接数据库并执行SQL语句,几乎所有的Python教程都会讲,教程里基本只介绍了执行单条SQL语句的方法,但是实际生产过程中可不只是执行一两条语句,动辄几十条甚至上百条的 ...
- HUAWEI,H3C 三层交换机 常用命令
<HUAWEI> display ip interface brief,命令全局模式下可以查看所有端口下的ip地址及物理状态display this interface,命令用来显示当前接 ...
- Maven父子工程,子项目变灰,提示该项目已被移除出maven父工程
最近使用maven的父子工程结构搭建微服务架构时,不知道什么原因, 子工程总是被莫名移除出父工程,然后打包处的项目名变成了灰色, 重启该项目时会提示,“该子项目已被移除,是否删除该项目”,这个 当然不 ...