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 ...
随机推荐
- Linux ethtool命令
一.简介 ethtool 是用于查询及设置网卡参数的命令. 二.常用选项 ethtool ethx //查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0.eth1等等 ethtool ...
- 迅为iTOP-4418开发板兼容八核6818开发板介绍
核心板介绍 三星四核S5P4418与八核6818完美兼容 1GB内存/2GB内存可选 电源管理:AXP228,支持动态调频,超低功耗 核心板引出脚最全:四组连接器共320个PIN脚 核心板连接器高度仅 ...
- 深入理解UIApplication和ios程序启动过程
在深入理解UIApplication前我们先了解ios程序的启动过程: UIApplication类在ios里面为app的管理和协调提供一个集中的点,每一个app有一个UIApplication的实例 ...
- UVA 439 Knight Moves --DFS or BFS
简单搜索,我这里用的是dfs,由于棋盘只有8x8这么大,于是想到dfs应该可以过,后来由于边界的问题,TLE了,改了边界才AC. 这道题的收获就是知道了有些时候dfs没有特定的边界的时候要自己设置一个 ...
- [3D跑酷] GUIManager UI管理
UI元素更新及界面跳转 继上篇日志<Unity开发之 GUIClickEventReceiver>,再谈一下我们如何管理游戏中的UI元素更新及界面跳转 UI绑定 图一:Inspector面 ...
- java12 - 7 排序的案例
对键盘录入的字符串中的字符进行排序. 举例:"dacgebf" 结果:"abcdefg" 分析:1.首先对字符转换为数组,并进行排序: A:直接让它们以字符的形 ...
- localStorage实现购物车数量单价和总价实时同步(二)
利用localStorage实时显示购物车小计和总价页面显示: 和昨天的原理相同,本地存储同时实时循环计算总价之和,注意循环时候的先清空再计算 Success is getting what you ...
- 手机中点击链接或button按钮出现黄色边框的解决办法
a,input,button{outline: none; -webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-focus-rin ...
- Android Studio使用中的异常
Android studio教程:[4]真机测试 1.连不上手机 Android Studio识别不了手机(最后还是恢复成勾中的状态),重启,Android Studio连接真机没反应? 2.连上手机 ...
- Linux查看系统资源命令
转载于:http://lxbins.blog.51cto.com/1089997/283663 top:======================================主要参数d:指定更新 ...