在c#中开始LINQ到XML
可扩展标记语言(XML)是表示必须在web上传输的复杂信息的最简单方法之一。它是平台独立的,这使它成为跨不同技术(如Web、桌面和移动)共享相同数据的良好解决方案。在c#中,. net框架提供了不同的方式来读写XML数据。一些重要的是' XMLTextReader ', ' XMLSerializer ', ' XMLDocument '和语言集成查询' LINQ '到' XML '。LINQ是一组扩展c#语言查询能力的特性
什么是LINQ到XML?
LINQ to XML是一组驻留在System.Xml中的。net框架类。Linq '命名空间用于从XML文档中创建、更新、删除和查询数据,即' XDocument '类。
LINQ到XML是如何工作的?
在LINQ to XML中,就像文档对象模型(DOM)一样,在执行任何操作之前,将XML文档放入内存中。集成的LINQ用于在内存XML文档中编写查询,它返回节点或节点的子集。
要了解更多关于c# LINQ的知识,请访问Udemy.com。
创建XML使用LINQ到XML
“函数构造”是最简单的LINQ到XML方法,用于创建XML文件。在这种方法中,在' XElement '和' XAttribute '对象的构造器中使用查询到的LINQ to XML结果来创建和转换XML树。下面的代码片段演示了如何使用函数构造创建XML文档。
代码片段1,创建一个Book类:
public class Book {public int ID {get;设置;} public string Name {get;设置;} public string版本{get;设置;} public int YearOfPublish{获得;设置;}}
代码片段2,用于创建XML文档:
书[]allBooks =新书[]{新书{ID = 1,名称=“开始使用c#”,Version = " 1.2 ", YearOfPublish = 1999},新书{ID = 2,名称=“c#概论”,Version = " 2.0 ", YearOfPublish = 2004},新书{ID = 3,名称=“c#的高级功能”,Version = " 4.0 ", YearOfPublish = 2014},};XDocument document = new XDocument (new XDeclaration (" 1.0", "utf-8", "yes"), new XElement ("Books", from book in allBooks select new XElement (" book ", new XAttribute("ID", " book. ID", " book. ID"));新增XElement ("Name", book. ID)名称),新的XElement(“版本”,书。版本),新的XElement(“YOP”,书。YearOfPublish))));文档。保存(“C: / Book.xml”);
在上面的代码片段中,“Book”类对象使用从“Book”对象数组查询的结果保存到XML文档中。' XElement '表示文档的根元素或根元素的子元素,而' XAttribute '表示元素的属性。在上面的LINQ to XML代码片段中,“XDocument”的“XElement”对象(根节点“Books”)与LINQ查询的数据一起使用,创建具有属性“ID”和子节点“Name”、“Version”和“YOP”的子元素(“book”),然后使用“document”保存在“book . XML”文件中。保存的方法。下面是上述代码片段的剥离输出。
< ?XML version="1.0" encoding="utf-8" standalone="yes"?>Getting Started with c# 1.2 1999
读XML使用LINQ到XML
使用LINQ to XML读取XML文档内容,首先包括在内存中加载文档,然后使用LINQ to XML的扩展方法返回一个节点集合。最后,使用LINQ查询该集合。下面的例子演示了扩展方法和LINQ查询的使用。
代码片段' 1 '
xelement xelement = xelement.load(“c:/book.xml”);IEnumerablebooks = XElement。元素();
代码片段' 2 '
IEnumerableBooks = (from book in XDocument。Load ("C:/ book .xml") .Descendants ("Books") select book) .ToArray ();代码片段“3”xelement xelement = xelement.load(“c:/book.xml”);Ienumable books =(从xelement.elements的书中(“书”)(“书”),其中(int)book.element(“yop”)== 2014选择书).toarray();
在上面的代码片段' 1 '和' 2 '中,读取XML文档的所有元素。在第一个代码片段' Load '方法与' XElement '对象被调用,它返回一个根节点的文档,然后在根,一个扩展方法' Elements '的LINQ到XML被调用,它返回' XElement '集合的根的所有子元素。
在第二个代码片段中,使用LINQ查询,‘XDocument’将XML文档加载到内存中,然后调用一个扩展方法‘Descendants’,它将XML的根节点返回给查询。最后,使用' Select '关键字指定返回的元素(在本例中是所有根节点元素)。
在第三个片段中,LINQ查询用于检索在“2014”年发布的图书元素。在代码片段' 3 '的开头,一个XML文档被' XElement '对象加载,然后在LINQ查询中,一个扩展方法' Elements '返回所有名称为' Book '的元素。where关键字用于查询2014年出版的图书。在最后一行,' select '关键字将这些检索到的元素指定为查询的结果。
使用LINQ将元素插入到XML
使用LINQ到XML插入一个新元素需要将XML文档加载到内存中,然后在' XDocument '对象上执行' element '方法以获得文档的第一个元素,该元素以其名称作为参数标识。最后,需要一个' Add '方法调用返回的' XElement '对象,并使用一个新的' XElement '对象作为参数。下面的代码片段演示了在XML中插入新元素的讨论过程。
代码片段:
XDocument document = XDocument。负载(“C: / Book.xml”);文档。元素(“书”)。添加(new XElement ("Book", new XAttribute("ID", 4), new XElement ("Name", " c# for新手用户"),new XElement ("Version", "1.0"), new XElement ("YOP", 2007));文档。保存(“C: / Book.xml”);
使用LINQ到XML更新元素
要使用LINQ将XML元素更新为XML,首先使用LINQ从所有元素中查询元素属性或子元素,然后调用' XElement '或' XAttribute '的' SetValue '方法来设置一个新值。下面的例子演示了这个概念:
代码片段
文档。元素(“书”)。e => e - element ("Name"). value . ("Name")select (e => e - element ("Version")) .Single () .SetValue ("1.2");文档。保存(“C: / Book.xml”);
使用LINQ到XML删除元素
要使用LINQ To XML删除一个XML元素,需要使用' where '关键字从所有元素中查询一个元素,然后调用' XElement '的' Remove '方法来删除被查询的元素。下面的示例删除了由“ID”查询的特定图书。
代码片段:
文档。元素(“书”)。e => e. attribute ("ID"). value . name ("ID")= (4) .Select (e = > e) .Single () .Remove ();文档。保存(“C: / Book.xml”);