C#基础知识---Linq操作XML文件
概述
Linq也就是Language Integrated Query的缩写,即语言集成查询,是微软在.Net 3.5中提出的一项新技术。
Linq主要包含4个组件---Linq to Objects、Linq to XML、Linq to DataSet 和Linq to SQL。
- Linq to SQL 组件——可以查询基于关系数据的数据
- Linq to Dataset组件——可以查询DasaSet对象中的数据,并对数据进行增删改查的操作
- Linq to Objects组件——可以查询IEnumberable 或IEnumberable<T>集合
- Linq to XML 组件——可以查询和操作XML文件,比Xpath操作XML更加方便
一、使用Linq创建XML文件
1 public static class XMLFileHelper
2 {
3 /// <summary>
4 /// Create a xml file
5 /// </summary>
6 /// <param name="xmlPath"></param>
7 private static void CreateXmlFile(string xmlPath)
8 {
9 try
10 {
11 //定义一个XDocument结构
12 object[] content = new object[20];
13 content[0] = new XElement("User", new XAttribute("Id", "1"),
14 new XElement("Name", "Jack"),
15 new XElement("Password", "123456"),
16 new XElement("Description", "I am Jack")
17 );
18 content[1] = new XElement("User", new XAttribute("Id", "2"),
19 new XElement("Name", "Mary"),
20 new XElement("Password", "135678"),
21 new XElement("Description", "I am Mary")
22 );
23 content[2] = new XAttribute("Id", "root");
24
25 content[3] = new XElement("User", new XAttribute("Id", "3"),
26 new XElement("Name", "Tom"),
27 new XElement("Password", "654123"),
28 new XElement("Description", "I am Tom")
29 );
30
31 XDocument myXDoc = new XDocument(new XElement("Users", content));
32 myXDoc.Save(xmlPath);
33 }
34 catch (Exception ex)
35 {
36 Console.WriteLine(ex.ToString());
37 }
38 }
39 }
创建后的xml文件如下所示:

二、使用Linq读取Xml文件
1 public static void GetXmlNodeInformation(string xmlPath)
2 {
3 try
4 {
5 //定义并从xml文件中加载节点(根节点)
6 XElement rootNode = XElement.Load(xmlPath);
7 //查询语句: 获得根节点下name子节点(此时的子节点可以跨层次:孙节点、重孙节点......)
8 IEnumerable<XElement> targetNodes = from target in rootNode.Descendants("Name")
9 where target.Value.Contains("a")
10 select target;
11 foreach (XElement node in targetNodes)
12 {
13 Console.WriteLine("Name = {0}", node.Value);
14 }
15 Console.WriteLine();
16 IEnumerable<XElement> myTargetNodes = from myTarget in rootNode.Descendants("User")
17 where myTarget.HasElements
18 select myTarget;
19 foreach (XElement node in myTargetNodes)
20 {
21 Console.WriteLine("Name = {0}", node.Element("Name").Value);
22 Console.WriteLine("Password = {0}", node.Element("Password").Value);
23 Console.WriteLine("Description = {0}", node.Element("Description").Value);
24 Console.WriteLine();
25 }
26 }
27 catch (Exception ex)
28 {
29 Console.WriteLine(ex.ToString());
30 }
31 }
运行结果如下:
三、使用Linq修改Xml文件
1 public static void ModifyXmlNodeInformation(string xmlPath)
2 {
3 try
4 {
5 //定义并从xml文件中加载节点(根节点)
6 XElement rootNode = XElement.Load(xmlPath);
7 IEnumerable<XElement> targetNodes = from target in rootNode.Descendants("User")
8 where target.Element("Name").Value=="Mary"
9 select target;
10 //遍历所获得的目标节点(集合)
11 foreach (XElement node in targetNodes)
12 {
13 //将用户名为Mary的User节点修改为Emma
14 node.Element("Name").SetValue("Emma");
15 node.Element("Description").SetValue("I am Emma");
16 }
17 //保存对xml的更改操作
18 rootNode.Save(xmlPath);
19 }
20 catch (Exception ex)
21 {
22 Console.WriteLine(ex.ToString());
23 }
24 }
修改后的xml文件如下所示:
四、添加新节点
1 public static void AddXmlNodeInformation(string xmlPath)
2 {
3 try
4 {
5 //定义并从xml文件中加载节点(根节点)
6 XElement rootNode = XElement.Load(xmlPath);
7 //定义一个新节点
8 XElement newNode = new XElement("User", new XAttribute("Id", "4"),
9 new XElement("Name", "Rose"),
10 new XElement("Password", "333333"),
11 new XElement("Description", "I am Rose"));
12 //将此新节点添加到根节点下
13 rootNode.Add(newNode);
14 //保存对xml的更改操作
15 rootNode.Save(xmlPath);
16 }
17 catch (Exception ex)
18 {
19 Console.WriteLine(ex.ToString());
20 }
21 }
结果如下:
五、删除节点
1 public static void DeleteXmlNodeInformation(string xmlPath)
2 {
3 try
4 {
5 //定义并从xml文件中加载节点(根节点)
6 XElement rootNode = XElement.Load(xmlPath);
7 //查询语句: 获取ID属性值等于"999999"的所有User节点
8 IEnumerable<XElement> targetNodes = from target in rootNode.Descendants("User")
9 let id= Convert.ToInt32(target.Attribute("Id").Value)
10 where id >=3
11 select target;
12
13 targetNodes.Remove();
14 //保存对xml的更改操作
15 rootNode.Save(xmlPath);
16
17 }
18 catch (Exception ex)
19 {
20 Console.WriteLine(ex.ToString());
21 }
22 }
运行结果如下:
六、实际应用---判断桌面上是否存在指定文件以及具体路径
1 private static string FileQuery(string targetFileName)
2 {
3 string myDeskTopDir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
4 string []fileNames = Directory.GetFiles(myDeskTopDir, "*.*", SearchOption.AllDirectories);
5 List<FileInfo> files = new List<FileInfo>();
6 foreach(var fileName in fileNames)
7 {
8 files.Add(new FileInfo(fileName));
9 }
10 var results = from file in files
11 where file.Name == targetFileName
12 select file;
13 StringBuilder queryResult = new StringBuilder();
14 foreach(var result in results)
15 {
16 queryResult.AppendLine("Query Result:" + result.FullName);
17 }
18 return queryResult.ToString();
19 }
C#基础知识---Linq操作XML文件的更多相关文章
- 应用Xml.Linq读xml文件
c#提供了System.Xml.Linq操作xml文件,非常方便,本文主要介绍如何应用System.Xml.Linq读取xml文件. xml文本 <?xml version="1.0& ...
- JAVA中通过Jaxp操作XML文件基础
Java中有多种方式操作XML文件,目前讲一讲以SUN公司提供的DocumentBuilderFactory工厂类对象操作XML. 使用XML基本操作就是需要CRUD(增删改查),那么首先通过一个查询 ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- C#操作xml文件:使用XmlDocument 实现读取和写入
XML文件是一种常用的文件格式,例如WinForm里面的app.config以及Web程序中的web.config文件,还有许多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖于内 ...
- Java操作XML文件 dom4j 篇
在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io. ...
- PHP操作XML文件学习笔记
原文:PHP操作XML文件学习笔记 XML文件属于标签语言,可以通过自定义标签存储数据,其主要作用也是作为存储数据. 对于XML的操作包括遍历,生成,修改,删除等其他类似的操作.PHP对于XML的操作 ...
- Qt之QDomDocument操作xml文件-模拟ini文件存储
一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...
- Linux基础知识第三讲,拷贝文件跟移动文件命令
目录 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命令 1.tree命令常用选项 2.cp复制文件命令 3.mv 命令的使用 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命 ...
- WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)
WebAPI调用笔记 前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...
随机推荐
- 「AGC027D」Modulo Matrix
「AGC027D」Modulo Matrix 传送门 神仙构造题. 首先考虑一个非常自然的思路,我们把棋盘黑白染色后会变成一个二分图,黑色棋子只会与白色棋子相邻. 也就是说,我们可以将二分图的一部随便 ...
- Cobbler自动部署装机 轻松解决装机烦恼
Cobbler自动部署装机一.实验准备二.搭建步骤1.导入epel源2.安装Cobbler以及其相关服务软件包3.修改Cobbler 主配置文件4.启动相关服务并关闭防火墙和selinux5.使用co ...
- 求数组的子数组之和的最大值II
这次在求数组的子数组之和的最大值的条件下又增加了新的约束: 1.要求数组从文件读取. 2.如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保 ...
- SpringMvc接受请求参数的几种情况演示
说明: 通常get请求获取的参数是在url后面,而post请求获取的是请求体当中的参数.因此两者在请求方式上会有所不同. 1.直接将接受的参数写在controller对应方法的形参当中(适用于get提 ...
- Java集合 - 初始化写法
List的初始化方法 方法一 List<Integer> list= new ArrayList<Integer>(){{ add(1); add(2); add(3); }} ...
- python中进程详解
1:pdb调试:基于命令行的调试工具,非常类似gnu和gdb调试,以下是常用的调试命令: 可以python -m pdb xxx.py(你的py文件名)进入命令行调试模式 命令 简写命令 作用 bea ...
- 使用javah 给.class类编译jni_helloworld.h文件头
第一步,在idea中,编写java文件,并且编译 package jni; public class HelloWorld { static { System.loadLibrary("He ...
- 第二章 Vant的v-cell的v-for使用
遍历加载list数据,类似el-table 一.问题描述 由于VantUI中没有类似于el-table的table组件,看官网的范例,只找到了cell组件有v-for
- sql server 查看数据库配置等信息(字符集,编码格式,版本号...)
select SERVERPROPERTY(N'edition') as Edition --数据版本,如企业版.开发版等,SERVERPROPERTY(N'collation') as Collat ...
- gitlab维护之修改clone地址
因为配置了域名访问gitlab私有仓库,但是在项目clone这里,显示的还是ip地址,并且还带端口,每次访问,clone都需要自己修改,比较不方便. 修改方法: sudo vim /opt/gitla ...