Linq To Xml操作XML增删改查
对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",""),new XElement("UserName","踏浪帅")),
- new XElement("User", new XElement("UserID", ""), new XElement("UserName", "wujunyang")),
- new XElement("User", new XElement("UserID", ""), 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) > 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", ""), 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) == 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) == 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="" Age="" />
- <User UserName="cnblogs" PassWord="" Age="" />
- <User UserName="踏浪帅" PassWord="" Age="" />
- </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", ""), new XAttribute("Age", "")),
- new XElement("User", new XAttribute("UserName", "cnblogs"), new XAttribute("PassWord", ""), new XAttribute("Age", "")),
- new XElement("User", new XAttribute("UserName", "踏浪帅"), new XAttribute("PassWord", ""), new XAttribute("Age", "")));
- 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 = ; i < newStr.Length; i++)
- {
- sb.Append(newStr[i].Trim());
- }
- return sb.ToString();
- }
- else
- {
- return null;
- }
- }
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮,若有不足欢迎指正。 因为,我的写作热情也离不开您的肯定支持。
感谢您的阅读(源代码下载)
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 ...
随机推荐
- JAVA RSA非对称加密详解[转载]
一.概述1.RSA是基于大数因子分解难题.目前各种主流计算机语言都支持RSA算法的实现2.java6支持RSA算法3.RSA算法可以用于数据加密和数字签名4.RSA算法相对于DES/AES等对称加密算 ...
- mysql客户端连不上数据库
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges ...
- Android逆向之smali学习
Smali是Android虚拟机Dalvik反汇编的结果. Dalvik指令集 指令格式为:[op]-[type](可选)/[位宽,默认4位] [目标寄存器],[源寄存器](可选) 赋值:move* ...
- git配置全局用户名
点击右键 ,点击git bash here 在控制面板输入 git config --global user.name "xxx" git config --global user ...
- 「ZJOI2018」历史(LCT)
「ZJOI2018」历史(LCT) \(ZJOI\) 也就数据结构可做了-- 题意:给定每个点 \(access\) 次数,使轻重链切换次数最大,带修改. \(30pts:\) 挺好想的.发现切换次数 ...
- 了解iOS消息推送一文就够:史上最全iOS Push技术详解
本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...
- Node.js项目拆包工程化
背景 在我们开发的过程中,经常会遇到这样的问题,开发完了一些代码或者一个接口,别的小伙伴过来问你,代码可不可以给他复用,接口可以给他调用.这说明代码的复用和抽象对团队协作是很重要的.举个例子,如下图 ...
- iOS学习——(转)iOS中关于通知的使用
在移动端开打过程中,经常会用到通知和推送,例如有短信来了需要通知提示,手机横屏了需要通知提示,插上耳机了需要通知提示等等,我们可以根据这些通知采取对应的动作.iOS系统自身定义了很对通知,但是在开发过 ...
- python基础-文件操作(10)
一.什么是文件 等等这些都叫做文件,各种格式的.但不仅仅限制于这些. 二.文件的作用 大家应该听说过一句话:“好记性不如烂笔头”. 不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了 ...
- 2.java面向对象类与类/类与对象之间关系详解
继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...