博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq之Linq to XML
阅读量:6979 次
发布时间:2019-06-27

本文共 3664 字,大约阅读时间需要 12 分钟。

目录

写在前面

在很多情况下,都可以见到使用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

第一个参数:节点名称

第二个参数:节点内容

下面看一个例子:

1 using System.Xml.Linq; 2 namespace Wolfy.LinqToXMLDemo 3 { 4     class Progra 5     { 6         static void Main(string[] args) 7         { 8             XElement persons = new XElement("Persons", 9                 new XElement("Person",10                     new XElement("ID", "1"),11                     new XElement("Name", "Wolfy"),12                     new XElement("Address", "北京昌平区")),13                 new XElement("Person",14                     new XElement("ID", "2"),15                     new XElement("Name", "zhangsan"),16                     new XElement("Address", "北京海淀区")));17             //保存在文件中18             persons.Save("1.xml");19             Console.WriteLine(persons.ToString());20             Console.Read();21         }22     }23 }

输出

和使用XmlDocument创建xml文档(关于xml普通创建方式这里不再做介绍,毕竟不是本文的重点,如有必要可在后面的文章中介绍。),确实方便了很多,通过XElement类创建xml树,通过层级关系缩进,非常清楚节点的层级关系。说句心里话,有简单的方式,谁不想偷偷懒啊。

那么我现在在Persons节点上,添加一个节点,并设置name的属性age。

1 persons.Add(2                 new XElement("Person",3                     new XElement("ID", "3"),4                     new XElement("Name",5                         new XAttribute("age","20"),6                         new XText("lisi")7                         ),8                     new XElement("Address", "上海")));

输出

1            //删除id为2的节点,使用linq查找到id为2的节点 2             IEnumerable
nodes = from p in persons.Elements("Person") 3 where p.Element("ID").Value== "2" 4 select p; 5 XElement node = nodes.SingleOrDefault(); 6 if (node!=null) 7 { 8 //移除 9 node.Remove();10 }

输出

为id为1的Person的name节点添加age属性,并修改名字为wanger。

1             //查找节点id为1的节点 2             IEnumerable
nodes = from p in persons.Elements("Person") 3 where p.Element("ID").Value == "1" 4 select p; 5 XElement node = nodes.SingleOrDefault(); 6 if (node != null) 7 { 8 //添加属性,修改节点内容 9 node.Element("Name").SetAttributeValue("age", "11");10 node.Element("Name").Value="wanger";11 }

输出

关于使用linq 查询 xml的例子这里都不再赘述了,上面的例子中,修改和删除都有涉及。

总结

本文主要介绍了,在linq to xml中几种常见的操作,当然方法很多,只是简单的熟悉语法。通过上面的例子,你也肯定对linq to xml的方式操作xml有了更进一步的认识。

参考文章

 https://msdn.microsoft.com/zh-cn/library/bb387098.aspx

转载于:https://www.cnblogs.com/wolf-sun/p/4278033.html

你可能感兴趣的文章
Typescript 2+迷你书 :从入门到不放弃
查看>>
Android studio 跟踪 Gradle Task 执行
查看>>
Java面试通关要点汇总集
查看>>
从源码角度理解Handler、Looper、MessageQueue之间关系
查看>>
Bitmap 比你想的更费内存 | 吊打 OOM
查看>>
为你揭秘小程序音视频背后的故事......
查看>>
自定义侧边快速索引栏
查看>>
一种自动化检测 Flash 中 XSS 方法的探讨
查看>>
基于环信sdk实现简单即时聊天
查看>>
Java基础-Synchronized原理
查看>>
大道至简,阿里巴巴敏捷教练的电子看板诞生记
查看>>
zookeeper学习04 zookeeper收尾+dubbo前瞻
查看>>
《讲个故事》为什么IP地址与Mac地址 缺一不可
查看>>
华山论剑之浅谈iOS的生产线 工厂模式
查看>>
浅谈javascript异步发展历程
查看>>
在vscode使用editorconfig的正确姿势
查看>>
当心!你的密码正在被手机中的声音泄露!
查看>>
你用过 PropTypes 的这些类型检查么?
查看>>
H5小游戏 【篇一】 组词游戏
查看>>
枚举的使用示例
查看>>