Linq之Linq to XML
目录
写在前面
在很多情况下,都可以见到使用xml的影子。例如,在 Web 上,在配置文件、Microsoft Office Word 文件(将word文档另存为xml文件,这也提供了一种通过操作xml,操作word的一种方式)以及数据库中,都可以看到 XML。而linq to xml提供了一种操作xml更便捷的方式。
系列文章
linq to xml
什么是linq to xml?
LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework 编程语言中处理 XML。
LINQ to XML 将 XML 文档置于内存中,这一点很像文档对象模型 (DOM)。 您可以查询和修改 XML 文档,修改之后,可以将其另存为文件,也可以将其序列化然后通过 Internet 发送。 但是,LINQ to XML 与 DOM 不同:它提供一种新的对象模型,这是一种更轻量的模型,使用也更方便,这种模型利用了 Visual C# 2008 在语言方面的改进。
LINQ to XML 最重要的优势是它与 语言集成查询 (LINQ) 的集成。 由于实现了这一集成,因此,可以对内存 XML 文档编写查询,以检索元素和属性的集合。 LINQ to XML 的查询功能在功能上(尽管不是在语法上)与 XPath 和 XQuery 具有可比性。 Visual C# 2008 集成 LINQ 后,可提供更强的类型化功能、编译时检查和改进的调试器支持。
LINQ to XML 的另一个优势是通过将查询结果用作 XElement 和 XAttribute 对象构造函数的参数,实现了一种功能强大的创建 XML 树的方法。 这种方法称为“函数构造”,利用这种方法,开发人员可以方便地将 XML 树从一种形状转换为另一种形状。
使用 LINQ to XML,您可以:
•从文件或流加载 XML。
•将 XML 序列化为文件或流。
•使用函数构造从头开始创建 XML。
•使用类似 XPath 的轴查询 XML。
•使用 Add、Remove、ReplaceWith 和 SetValue 等方法对内存 XML 树进行操作。
•使用 XSD 验证 XML 树。
•使用这些功能的组合,可将 XML 树从一种形状转换为另一种形状。
创建xml树
使用 LINQ to XML 编程的一个明显优势是易于创建 XML 树。(需要用到linq to xml的时候,需要引入命名空间:using System.Xml.Linq;)。
创建xml树,需要用类XElement

第一个参数:节点名称
第二个参数:节点内容
下面看一个例子:
using System.Xml.Linq;
namespace Wolfy.LinqToXMLDemo
{
class Progra
{
static void Main(string[] args)
{
XElement persons = new XElement("Persons",
new XElement("Person",
new XElement("ID", ""),
new XElement("Name", "Wolfy"),
new XElement("Address", "北京昌平区")),
new XElement("Person",
new XElement("ID", ""),
new XElement("Name", "zhangsan"),
new XElement("Address", "北京海淀区")));
//保存在文件中
persons.Save("1.xml");
Console.WriteLine(persons.ToString());
Console.Read();
}
}
}
输出

和使用XmlDocument创建xml文档(关于xml普通创建方式这里不再做介绍,毕竟不是本文的重点,如有必要可在后面的文章中介绍。),确实方便了很多,通过XElement类创建xml树,通过层级关系缩进,非常清楚节点的层级关系。说句心里话,有简单的方式,谁不想偷偷懒啊。
增
那么我现在在Persons节点上,添加一个节点,并设置name的属性age。
persons.Add(
new XElement("Person",
new XElement("ID", ""),
new XElement("Name",
new XAttribute("age",""),
new XText("lisi")
),
new XElement("Address", "上海")));
输出

删
//删除id为2的节点,使用linq查找到id为2的节点
IEnumerable<XElement> nodes = from p in persons.Elements("Person")
where p.Element("ID").Value== ""
select p;
XElement node = nodes.SingleOrDefault();
if (node!=null)
{
//移除
node.Remove();
}
输出

改
为id为1的Person的name节点添加age属性,并修改名字为wanger。
//查找节点id为1的节点
IEnumerable<XElement> nodes = from p in persons.Elements("Person")
where p.Element("ID").Value == ""
select p;
XElement node = nodes.SingleOrDefault();
if (node != null)
{
//添加属性,修改节点内容
node.Element("Name").SetAttributeValue("age", "");
node.Element("Name").Value="wanger";
}
输出

查
关于使用linq 查询 xml的例子这里都不再赘述了,上面的例子中,修改和删除都有涉及。
总结
本文主要介绍了,在linq to xml中几种常见的操作,当然方法很多,只是简单的熟悉语法。通过上面的例子,你也肯定对linq to xml的方式操作xml有了更进一步的认识。
参考文章
https://msdn.microsoft.com/zh-cn/library/bb387098.aspx
Linq之Linq to XML的更多相关文章
- C# ~ 从 XML 到 Linq 到 Linq to XML
.XML 可扩展标记语言 (Extensible Markup Language), 标记 (markup) 是关键部分,是标准通用标记语言 (Standard Generalized Markup ...
- Linq之Linq to Sql
目录 写在前面 系列文章 Linq to sql 总结 写在前面 上篇文章介绍了linq to xml的相关内容,linq to xml提供一种更便捷的创建xml树,及查询的途径.这篇文章将继续介绍l ...
- Linq技术四:动态Linq技术 -- Linq.Expressions
前面介绍了Linq的三个方面应用:Linq to SQL, Linq to XML和Linq to Object,这篇介绍一下动态Linq的实现方式及应用场景. 命名空间: System.Linq; ...
- C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是TAP(Task-based Asynchronous Pattern, 基于任务的异步模式)
学习书籍: <C#本质论> 1--C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是 ...
- 使用Linq快速的操作XML
开始内容之前先分享一段话 有时候,当你知道要做什么的时候就做的很快,比如你要实现个功能,码字的活儿不算很难,做个检索也不会有什么难倒你的.但是,做着做着,你发现好像世界上的工作都在重复,于是你有种心要 ...
- Linq之Linq to Objects
目录 写在前面 系列文章 linq to objects 总结 写在前面 上篇文章介绍了linq的延迟加载特性的相关内容,从这篇文章开始将陆续介绍linq to Objects,linq to xml ...
- LINQ(LINQ to Entities)
LINQ to Entities 是 LINQ 中最吸引人的部分.它让你可以使用标准的 C# 对象与数据库的结构和数据打交道.使用 LINQ to Entities 时,LINQ 查询在后台转换为 S ...
- LINQ之LINQ to Objects(上)
LINQ概述 LINQ,语言集成查询(Language Integrated Query),它允许使用C#或VB代码以查询数据库相同的方式来操作不同的数据源. 1.LINQ体系结构 从上图可以看出,L ...
- LINQ以及LINQ to Object 和LINQ to Entities
LINQ的全称是Language Integrated Query,中文译成“语言集成查询”,是一种查询技术. LINQ查询通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了查询过程.LIN ...
随机推荐
- python 练习多级菜单思路
只写了一个zj的三级菜单,后面的功能没写 #-*- coding :utf-8 -*- print """ 你可以输入省份然后根据市县输入 ""&qu ...
- Window I/O 完成端口 (Windows I/O Completion Port (IOCP))
相关对象 IO EndPoint, 所有支持重叠IO(overlapped IO)的设备,比如文件,Winsock,管道等. IOCP, IO完成端口内核对象,可以使用API CreateIoComp ...
- HTML5与触摸界面
习惯了开发典型的面向电脑端浏览器的网站在开发手机端网站或者移动App的时候面对很多新的问题,这些新的问题,在我看来或多或少会给浏览者在使用网站或App的时候带来不好的用户体验,对于一个产品级应用,用户 ...
- 1维FDTD仿真
FDTD基本原理是把麦克斯韦方程胡两个矢量旋度方程写成差分形式,利用数值方法求其解. 假设电磁场传播方向为x轴方向,电场只有z轴方法分量,磁场只有y轴方向分量.两个旋度方程可以写成下列形式 电场.磁场 ...
- js开发工具箱
昨天看到一位大牛的博客,里面有一篇文章“web前端开发分享-目录”,文章中提到的一个给前端er用的一个js开发工具箱.自己使用了一下,非常好用,代码压缩,代码美化,加密,解密之类基本功能都有,生成二维 ...
- UVALive 6470 Chomp --记忆化搜索
题意:给一个只有三行的方块阵(横向最多100个),然后p,q,r分别代表第1,2,3层的方格数,两人轮流去掉一个格子,此时这个格子的右上方都会被去掉,面临只剩最左下角的一个格子的状态的人输,问先手能否 ...
- POJ 2318 TOYS【叉积+二分】
今天开始学习计算几何,百度了两篇文章,与君共勉! 计算几何入门题推荐 计算几何基础知识 题意:有一个盒子,被n块木板分成n+1个区域,每个木板从左到右出现,并且不交叉. 有m个玩具(可以看成点)放在这 ...
- AE二次开发技巧之撤销、重做
原文地址:http://www.cnblogs.com/wylaok/articles/2363208.html 可以把AE自带的重做.撤销按钮或工具添加到axToolBarControl上,再把ax ...
- 认识实验室信息管理系统(LIMS)
在当今互联网如日中天的大环境下,各种伴随着互联网的产物如p2p,o2o在如火如荼的进行着,吸引了大量的开发人员都涌向了这个行业,所有的技术似乎都在围绕着互联网发展,传统行业软件开发的人气和关注度就相形 ...
- [2]Telerik Extensions for ASP.NET MVC 中文教程(2)
上一篇文章对Telerik MVC Extensions作了一个大概的介绍,这篇文章将介绍如何将Telerik MVC Extensions添加到项目中.有以下两种方式可以将Telerik MVC E ...