`
king_tt
  • 浏览: 2112169 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

LINQ学习心得分享--------(四)LINQ TO XML实用解析

 
阅读更多

在开始将之前,先请大家看一下本节的标题,没错!是"LINQTOXML实用解析",所以在这一节里我会以实用为主,向大家一步一步讲解LINQTOXML的知识。

首先解释一下什么是LINQtoXML?LINQtoXML是一种启用了LINQ的内存XML编程接口,使用它,可以在.NETFramework编程语言中处理XML。在LINQtoXML之前,我们主要通过XMLDOM来创建XML文档对象。下面我给大家演示一下如何通过XMLDOM创建文档对象。

示例:

privatestaticvoidUserXMLDOMCreateXML()

{

XmlDocumentxDocument=newXmlDocument();

XmlElementxRoot=xDocument.CreateElement("Persons");

XmlElementxPerson=xDocument.CreateElement("Person");

XmlElementxPName=xDocument.CreateElement("Name");

xPName.InnerText="Olive";

XmlElementxAge=xDocument.CreateElement("Age");

xAge.InnerText="22";

XmlElementxPerson1=xDocument.CreateElement("Person");

XmlElementxPName1=xDocument.CreateElement("Name");

xPName1.InnerText="Ares";

XmlElementxAge1=xDocument.CreateElement("Age");

xAge1.InnerText="23";

XmlElementxPerson2=xDocument.CreateElement("Person");

XmlElementxPName2=xDocument.CreateElement("Name");

xPName2.InnerText="Only";

XmlElementxAge2=xDocument.CreateElement("Age");

xAge2.InnerText="23";

XmlElementxPerson3=xDocument.CreateElement("Person");

XmlElementxPName3=xDocument.CreateElement("Name");

xPName3.InnerText="Love";

XmlElementxAge3=xDocument.CreateElement("Age");

xAge3.InnerText="23";

xPerson.AppendChild(xPName);

xPerson.AppendChild(xAge);

xRoot.AppendChild(xPerson);

xPerson1.AppendChild(xPName1);

xPerson1.AppendChild(xAge1);

xRoot.AppendChild(xPerson1);

xPerson2.AppendChild(xPName2);

xPerson2.AppendChild(xAge2);

xRoot.AppendChild(xPerson2);

xPerson3.AppendChild(xPName3);

xPerson3.AppendChild(xAge3);

xRoot.AppendChild(xPerson3);

xDocument.AppendChild(xRoot);

xDocument.Save(@"D:\LinqToXml.xml");

}

结果如下:

下面再使用LINQToXML的方式,创建一个XML文档对象。

示例:

privatestaticvoidUseLINQXMLCreateXML()

{

XElementxElement=newXElement("Persons",

newXElement("Person",

newXElement("Name","Olive"),

newXElement("Age","22")),

newXElement("Person",

newXElement("Name","Ares"),

newXElement("Age","23")),

newXElement("Person",

newXElement("Name","Only"),

newXElement("Age","23")),

newXElement("Person",

newXElement("Name","Love"),

newXElement("Age","22"))

);

xElement.Save(@"D:\LINQToXML.xml");

}

结果如下:

通过以上结果可以发现,我们通过LinqToXML的方式创建XML文档对象,比XMLDOM方式要剩下很多的代码,使用起来也更方便、高效。

好了,通过这个例子我想你已经基本上学会了使用LINQTOXML的方式创建XML文档,但是还有一些相关的东西,让我来为你细细道来。

我们看一般的XML文件里边都有注释,如果我们想要为我们所创建的文档添加注释该怎么办呢?

请看示例:

刚刚我们已经创建了XML文档对象,可是如果需求有变化需要向该对象添加新的子项这时该怎么办呢?

我们可以同过XElement.Add()的方法向XML文档对象添加新元素

请看示例:

privatestaticvoidAddNewXMLItem()

{

XElementxe=newXElement("Pseron",newXElement("Name","Remote"),newXElement("Age","23"));

xElement.Add(xe);

xElement.Save(@"D:\LINQToXML.xml");

Console.WriteLine("元素添加成功!");

}

结果如下:

由此可知通过XElement.Add()方法,可以像XML文档对象添加新的元素,但是添加的元素,默认都添加在文档对象的末尾,如果想要添加到文档开头怎么办呢?

可以使用XElement.AddFirst()方法

示例:

XElementxe=newXElement("Pseron",newXElement("Name","Snow"),newXElement("Age","23"));

xElement.AddFirst(xe);

xElement.Save(@"D:\LINQToXML.xml");

Console.WriteLine("元素添加成功!");

结果:

除此之外还有AddAfterSelf()和AddBeforeSelf()方法,作用分别是:紧跟在此节点之后(之前)添加指定的内容。这里就不再做示例了。

说完了添加,如果要删除元素该怎么办呢?

通常我们会用XElement.Remove()方法或者XElement.RemoveAll()(为删除所有元素)

请看下面的示例:

//删除XML文档对象的第一元素

xElement.Elements("Person").First().Remove();

结果:

//删除XML文档对象中Name元素值为Ares的<Person>节点

xElement.Elements("Person").Elements("Name").Where(p=>p.Value=="Ares").Remove();

结果:

和上边的结果图对比可知Name为"Ares"的节点已经被删除了。

同样,如果我们想要查找某个节点也可这样做。请看上示例:

//查询XML文档对象中Name元素的值为“Love”的<Person>节点,并将其内容输出

示例:privatestaticvoidSerachXMLItem()

{

Console.WriteLine("查询结果:");

XElementx=xElement.Elements("Person").Where(p=>p.Element("Name").Value=="Love").FirstOrDefault();

Console.WriteLine(x.ToString());

}

结果:

学会了查找,修改XML文档对象的指定内容就更加容易了。

////查询XML文档对象中Name元素的值为“Love”的<Person>节点,并将其内容做如下修改,<Name>Momo</Name>,<Age>22</Age>

示例:

privatestaticvoidSerachXMLItem()

{

Console.WriteLine("查询结果:");

XElementx=xElement.Elements("Person").Where(p=>p.Element("Name").Value=="Love").FirstOrDefault();

Console.WriteLine("修改前查询到的信息:");

Console.WriteLine(x.Element("Name").ToString());

Console.WriteLine(x.Element("Age").ToString());

x.Element("Name").Value="MoMo";

x.Element("Age").Value="22";

Console.WriteLine("修改后的结果:");

Console.WriteLine(x.ToString());

}

结果:

原来Name值为Love的XML文档的最后,修改后Name值成为了"Momo"

至此,我想大家已经学会了LinqToXML的基本的增删改查新建等一些的操作,你有没有发现这里边用到了很多我们在开始这个系列课程学习时,学习的一些C#3.0的新特性呢,Lamdba在这里用的比较多,还有一些Linq的查询函数用到的之前讲的扩展方法,但是这些还远远的不够,在下面,我会仔细的把一些相关LinqToXML的东西再深入的讲解一下。

在实际的开发中可能需要为某些特定的元素添加一些额外的属性,通过下边的这个示例,我会向你展示,添加、修改、删除属性的方法。

示例:

//为Name值为Love的Person添加地址属性,属性值为“北京”

Console.WriteLine("为特定的元素添加地址属性:");

XElementx=xElement.Elements("Person").Where(p=>p.Element("Name").Value=="Love").FirstOrDefault();

x.SetAttributeValue("Address","北京");

Console.WriteLine(x.ToString());

结果:

示例:

//修改Name值为Love的Person的地址属性,修改属性值为“郑州”

示例:

privatestaticvoidChangeAttribute()

{

Console.WriteLine("修改特定元素的地址属性:");

XElementx=xElement.Elements("Person").Where(p=>p.Element("Name").Value=="Love").FirstOrDefault();

x.SetAttributeValue("Address","郑州");

Console.WriteLine(x.ToString());

}

结果:

如果想要删除属性的话,也很简单,只需要将要删除的属性值设为null就可以了

示例:

privatestaticvoidDeleteAttribute()

{

Console.WriteLine("删除特定属性");

XElementx=xElement.Elements("Person").Where(p=>p.Element("Name").Value=="Love").FirstOrDefault();

x.SetAttributeValue("Address",null);

}

结果:

总而言之,与属性有关的操作都在XElement.SetAttributeValue()这个方法里。

在有些时候我们想要替换文档对象中的某些元素,请注意是“替换”而不是修改,那么你可以这样做:

示例:使用ReplaceAll()替换元素

privatestaticvoidReplaceXElement()

{

Console.WriteLine("ReplaceAll()替换特定元素");

XElementx=xElement.Elements("Person").Where(p=>p.Element("Name").Value=="Love").FirstOrDefault();

Console.WriteLine("替换前");

Console.WriteLine(x.ToString());

x.ReplaceAll("O(∩_∩)O哈哈~");

Console.WriteLine("替换后");

Console.WriteLine(x.ToString());

}

结果:

示例:将特定的元素替换为一个新的元素

privatestaticvoidReplaceXElement()

{

Console.WriteLine("ReplaceAll()替换特定元素");

XElementx=xElement.Elements("Person").Where(p=>p.Element("Name").Value=="Love").FirstOrDefault();

Console.WriteLine("替换前");

Console.WriteLine(x.ToString());

x.ReplaceWith(newXElement("ZhiYe",

newXElement("Name","Olive"),

newXElement("Job","Sudent")));

}

结果:

以上我们讲的这些都是在新建的文档对象里进行的操作,有时候我们可能会需要从已存在的文档中加载文档内容,一般可以通过XDocument类的静态的Load()方法,也可以通过使用XElement.Load()方法来完成这样的操作。XElement的Load方法是一种轻量级的方法,不需要新建文档对象,使用起来也比较方便,所以下面的示例就主要将一下使用XElement.Load()方法来加载已存在的文档。

privatestaticvoidXElementLoad()

{

XElementroot=XElement.Load(@"D:\LINQToXML.xml");

XElementx=root.Elements("Person").Where(p=>p.Element("Name").Value=="Olive").FirstOrDefault();

Console.WriteLine(x.ToString());

}

结果:

在实际的开发中我们可能会需要从现有的XML文档中读取信息,然后和返回相应的信息集合,在WindowsPhone7的开发中,有时候我们就需要加载本地的XML数据,然后返回数据集合与ListBox进行绑定。

下边就做这样一个获取数据集合的小例子:

首先根据XML的结构特点创建一个相应的Person类:

publicclassPerson

{

publicstringName{get;set;}

publicstringAge{get;set;}

}

示例:返回数据集合

privatestaticvoidJiHe()

{

//从xml文档读取信息,并转换为相应的Person类集合

List<Person>psersonList=XElement.Load(@"D:\LINQToXML.xml").Elements("Person").Select(p=>newPerson

{

Name=p.Element("Name").Value,

Age=p.Element("Age").Value

}).ToList();

Console.WriteLine("输出从XML文档中读取的集合对象!");

foreach(PersonpinpsersonList)

{

Console.WriteLine("姓名:"+p.Name+"年龄:"+p.Age);

}

}

结果:

好了,到这里已经把比较实用的LinqToXml操作的所有方法都讲过了,希望可以对大家有所帮助,这里主要以实用为主,当然还有其他的一些方法和相关的操作类都没有讲到,如果有兴趣的朋友可以自己去关注一下。下一节,主要会将LinqToSql的操作,这个也是比较常用和重要的。希望大家多多指导!

分享到:
评论

相关推荐

    calcite-linq4j-1.2.0-incubating-API文档-中文版.zip

    赠送jar包:calcite-linq4j-1.2.0-incubating.jar; 赠送原API文档:calcite-linq4j-1.2.0-incubating-javadoc.jar; 赠送源代码:calcite-linq4j-1.2.0-incubating-sources.jar; 赠送Maven依赖信息文件:calcite-...

    LINQ 学习资料 -- 强烈推荐

    相当不错的LINQ学习资源 很全面 值得推荐一下

    calcite-linq4j-1.2.0-incubating.jar

    calcite-linq4j-1.2.0-incubating.jar

    LINQ详细教程

    Linq To Xml学习 - 1. 概述 79 Linq To Xml学习 - 2 编程概述 81 C# 2008 学习笔记 - LINQ to XML 86 一、命名空间 86 二、编程方式创建XML文档 87 三、使用 LINQ 查询创建XML文档 88 四、加载和解析XML内容 89 六...

    精通LINQ LINQ to XML

    学习LINQ的目前国内现有的最好的资源,有LINQ to xml的精讲,LINQ 的初级,高级学习,是学习LINQ的好资源。

    LINQ中文教程LINQ中文教程

    Linq To Xml学习 - 1. 概述 80 Linq To Xml学习 - 2 编程概述 82 C# 2008 学习笔记 - LINQ to XML 87 一、命名空间 87 二、编程方式创建XML文档 88 三、使用 LINQ 查询创建XML文档 89 四、加载和解析XML内容 90 六...

    LINQ中文系列教程

    Linq To Xml学习 - 1. 概述 80 Linq To Xml学习 - 2 编程概述 82 C# 2008 学习笔记 - LINQ to XML 87 一、命名空间 87 二、编程方式创建XML文档 88 三、使用 LINQ 查询创建XML文档 89 四、加载和解析XML内容 90 六...

    LINQ实战 linq to sql linq to xml 人民邮电出版社

    本书部分介绍了LINQ技术及C#和VB为此提供的新语言特性,第二、三、四部分详细介绍了LINQ的主要功能LINQ to Objects、LINQ to SQL、LINQ to XML,第五部分研究了LINQ的可扩展性、在应用程序中使用各种LINQ功能的方法...

    LINQ教程中文版(LINQ TO SQL ,LINQ TO XML)

    LINQ TO SQL ,LINQ TO XML,LINQ中文教程,是强人书写的,制作有点粗糙,但是,是好教材

    VS2008 LINQ基础教程

    Linq To Xml学习 - 1. 概述 80 Linq To Xml学习 - 2 编程概述 82 C# 2008 学习笔记 - LINQ to XML 87 一、命名空间 87 二、编程方式创建XML文档 88 三、使用 LINQ 查询创建XML文档 89 四、加载和解析XML内容 90 六...

    LINQ中文教程(WORD格式)

    Linq To Xml学习 - 1. 概述 80 Linq To Xml学习 - 2 编程概述 82 C# 2008 学习笔记 - LINQ to XML 87 一、命名空间 87 二、编程方式创建XML文档 88 三、使用 LINQ 查询创建XML文档 89 四、加载和解析XML内容 90 六...

    C# LinqXML使用LINQ技术对XML文件进行读取

    亲测好用,利用c# 的LinqXML技术 使用LINQ技术对XML文件进行读取

    LInq入门宝典 Linq To Xml linq to sql

    Linq开发宝典 LInq入门宝典 Linq To Xml linq to sql

    LINQ基础教程(中文版) 适合初学者

    Linq To Xml学习 - 1. 概述 80 Linq To Xml学习 - 2 编程概述 82 C# 2008 学习笔记 - LINQ to XML 87 一、命名空间 87 二、编程方式创建XML文档 88 三、使用 LINQ 查询创建XML文档 89 四、加载和解析XML内容 90 六...

    LINQ中文教程word格式

    Linq To Xml学习 - 1. 概述 37 Linq To Xml学习 - 2 编程概述 38 C# 2008 学习笔记 - LINQ to XML 41 一、命名空间 41 二、编程方式创建XML文档 41 三、使用 LINQ 查询创建XML文档 42 四、加载和解析XML内容 42 六...

    LINQ To Xml示例程序

    LINQ To Xml示例程序

    Linq 大全 Linq To Sql Linq To DataSet Linq To Object Linq to Xml

    Linq 大全 Linq To Sql Linq To DataSet Linq To Object Linq to Xml

    Linq-To-Sql-Part_2-Define-Data-Model-Class

    Linq-To-Sql-Part_2-Define-Data-Model-Class

    Linq to xml,读取XMl节点值

    Linq to xml,读取XMl节点值,linq,读取XMl节点值绑定。

    LINQ TO XML操作示例 初学者必看

    LINQ TO XML操作示例 轻轻松松 学会简单操作 本例子包含了通过LINQ创建XML、加载XML、读取XML、修改XML元素、属性、删除XML元素节点、属性,XML排序,保存XML等 ...适合学习LINQ TO XML的内容 并快速掌握

Global site tag (gtag.js) - Google Analytics