LinqToXML高级编程体验篇

作者:小菜 更新时间:2025-03-16 点击数:
简介:首先,我们在Linq初级班 Linq To XML体验(基础)和Linq初级班 Linq To XML体验(编程篇)了解了一些XML的基本知识以及如何用LINQ

【菜科解读】

首先,我们在Linq初级班 Linq To XML体验(基础)和Linq初级班 Linq To XML体验(编程篇)了解了一些XML的基本知识以及如何用LINQ to XML对XML文档进行简单的操作,本文将继续深入LINQ to XML,做一些高级编程的演示.我也是LINQ的初学者,文章中不免会有一些不对的地方,希望高手们多多指点,为我们LINQ初学者们多提宝贵的意见,我也会继续努力的,本文章目录如下所示:目录1.Linq to XML函数构造2.Linq to XML批注3.Linq to XML轴4.Linq to XML事件1.Linq to XML函数构造函数构造是指通过单个语句构建XML树的能力.在Linq初级班 Linq To XML体验(编程篇)中我们已经体验了如何使用XElement和XAttribute类手工创建XML树,也可以通过其他XElement和XAttribute对象传递给XElement类的构造函数来创建子元素和属性,也就是说,LINQ查询的结果可以用来创建XML树,下面就来看看一个演示:代码 //-----------------------------------------------------------// All Rights Reserved , Copyright (C) 2010 ,黄聪 , Ltd .//-----------------------------------------------------------using System;using System.Xml.Linq;using System.Linq;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { XElement xel = new XElement(new XElement("Root", new XElement("Person", new XElement("Name", "Huang Cong"), new XElement("Sex", "男"), new XElement("Age", 22)), new XElement("Person", new XElement("Name", "Li Si"), new XElement("Sex", "女"), new XElement("Age", 12)) )); //通过LINQ查询将xel的元素添加至新的XElement中 XElement newXel = new XElement(new XElement("NewRoot", new XElement("Persons", xel.Elements().Where(u => u.Name == "Person").Select(u => u) ))); Console.WriteLine(newXel); } }}运行结果:

2.Linq to XML批注LINQ to XML批注是指将一个对象添加或关联到一个XML节点或者属性,批注可以是任何类型的任何对象,可以通过XElement或XAttribute类的AddAnnotation方法来添加批注,需要注意的是:当调用AddAnnotation方法时,是将一个新的对象添加至相应的元素或属性上,原先绑定的批注并不会被删除掉,如果想删除批注,可以调用RemoveAnnotations方法:代码 //-----------------------------------------------------------// All Rights Reserved , Copyright (C) 2010 ,黄聪 , Ltd .//-----------------------------------------------------------using System;using System.Xml.Linq;using System.Linq;namespace ConsoleApplication1{ class Program { public class Test { public int Id { get; set; } public string Info { get; set; } } static void Main(string[] args) { XElement xel = new XElement(new XElement("Root", new XElement("Person", "Huang Cong"))); //为元素添加2个批注 xel.Element("Person").AddAnnotation(new Test() { Id = 1, Info = "测试1" }); xel.Element("Person").AddAnnotation(new Test() { Id = 2, Info = "测试2" }); Console.WriteLine("为元素添加2个批注:"); var query = xel.Element("Person").Annotations().Select(u => u); foreach (var q in query) { Console.WriteLine(q.Info); } Console.WriteLine("-------------------------------------"); //删除所有批注 xel.Element("Person").RemoveAnnotations(); Console.WriteLine("删除所有批注:"); query = xel.Element("Person").Annotations().Select(u => u); foreach (var q in query) { Console.WriteLine(q.Info); } Console.WriteLine("-------------------------------------"); } }}运行结果:3.Linq to XML轴LINQ to XML提供了对XML的查询功能,以查找特定的元素或者属性并返回它们的值,LINQ to XML的轴方法让你可以轻松实现以上的功能,LINQ to XML还提供了返回个别节点的方法,这可以让开发人员处理更细粒度的细节.下面是几个主要的轴方法:1. Descendants和DescendantsAndSelf2. Ancestors和AncestorsAndSelf3. ElementsAfterSelf和ElementBeforeSelf下面分别给各个方法做示例讲解:3.1 Descendants和DescendantsAndSelfDescendants方法返回指定元素的后继元素的集合,不包括元素本身,而DescendantsAndSelf则包括元素本身.代码 //-----------------------------------------------------------// All Rights Reserved , Copyright (C) 2010 ,黄聪 , Ltd .//-----------------------------------------------------------using System;using System.Xml.Linq;using System.Linq;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { XElement xel = new XElement(new XElement("Root", new XElement("Person", new XElement("Name", "Huang Cong"), new XElement("Age", 22)), new XElement("Person", new XElement("Name", "Li Si"), new XElement("Age", 12)) )); Console.WriteLine("遍历所有元素:"); var des = xel.Descendants(); foreach (var d in des) { Console.WriteLine(d); } Console.WriteLine("----------------------------------"); Console.WriteLine("遍历所有名称为Person的元素,不包括本身:"); des = xel.Descendants("Person").Descendants(); foreach (var d in des) { Console.WriteLine(d); } Console.WriteLine("----------------------------------"); Console.WriteLine("遍历所有名称为Person的元素,包括本身:"); des = xel.Descendants("Person").DescendantsAndSelf(); foreach (var d in des) { Console.WriteLine(d); } Console.WriteLine("----------------------------------"); } }}运行结果:3.2 Ancestors和AncestorsAndSelfAncestors方法返回指定节点的上级元素,不包括元素本身,而AncestorsAndSelf则包括元素本身.代码 //-----------------------------------------------------------// All Rights Reserved , Copyright (C) 2010 ,黄聪 , Ltd .//-----------------------------------------------------------using System;using System.Xml.Linq;using System.Linq;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { XElement xel = new XElement(new XElement("Root", new XElement("Person", new XElement("Name", "Huang Cong")) )); Console.WriteLine("遍历所有元素:"); var des = xel.Descendants(); foreach (var d in des) { Console.WriteLine(d); } Console.WriteLine("----------------------------------"); Console.WriteLine("遍历所有名称为Name的元素的上级元素集合,不包括本身:"); des = xel.Element("Person").Element("Name").Ancestors(); foreach (var d in des) { Console.WriteLine(d); } Console.WriteLine("----------------------------------"); Console.WriteLine("遍历所有名称为Name的元素的上级元素集合,包括本身:"); des = xel.Element("Person").Element("Name").AncestorsAndSelf(); foreach (var d in des) { Console.WriteLine(d); } Console.WriteLine("----------------------------------"); } }}运行结果:3.3 ElementsAfterSelf和ElementBeforeSelfElementsAfterSelf方法和ElementBeforeSelf方法分别返回指定元素之后的元素和值指定元素之前的元素,也可以指定条件返回指定的元素集合.代码 //-----------------------------------------------------------// All Rights Reserved , Copyright (C) 2010 ,黄聪 , Ltd .//-----------------------------------------------------------using System;using System.Xml.Linq;using System.Linq;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { XElement xel = new XElement(new XElement("Root", new XElement("Person", new XElement("Name", "Huang Cong"), new XElement("Sex","男"), new XElement("Age",12))) ); Console.WriteLine("获取Name元素之后的元素集合:"); var des = xel.Element("Person").Element("Name").ElementsAfterSelf(); foreach (var d in des) { Console.WriteLine(d); } Console.WriteLine("----------------------------------"); Console.WriteLine("获取Name元素之后的名为Sex的元素集合:"); des = xel.Element("Person").Element("Name").ElementsAfterSelf("Sex"); foreach (var d in des) { Console.WriteLine(d); } Console.WriteLine("----------------------------------"); Console.WriteLine("获取Age元素之前的元素集合:"); des = xel.Element("Person").Element("Age").ElementsBeforeSelf(); foreach (var d in des) { Console.WriteLine(d); } Console.WriteLine("----------------------------------"); Console.WriteLine("获取Age元素之前的名为Sex的元素集合:"); des = xel.Element("Person").Element("Age").ElementsBeforeSelf("Sex"); foreach (var d in des) { Console.WriteLine(d); } Console.WriteLine("----------------------------------"); } }}运行结果:4.Linq to XML事件在对XML树进行修改的时候,LINQ to XML事件会提供通知,LINQ to XML提供了2个事件来响应XML树的修改:Changing和Changed.当修改XML树时这2个时间会相继被触发.从运行结果我们可以看出,更新动作实际上是一个删除操作加上一个添加完成的:代码 //-----------------------------------------------------------// All Rights Reserved , Copyright (C) 2010 ,黄聪 , Ltd .//-----------------------------------------------------------using System;using System.Xml.Linq;using System.Linq;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { XElement xel = new XElement(new XElement("Root", new XElement("Person", new XElement("Name", "Huang Cong"), new XElement("Sex","男"), new XElement("Age",12))) ); xel.Changing += new EventHandler(xel_Changing); xel.Changed += new EventHandler(xel_Changed); //修改Person元素的Age元素值 xel.Element("Person").SetElementValue("Age", 22); } static void xel_Changed(object sender, XObjectChangeEventArgs e) { Console.WriteLine("触发Changed事件:"); Console.WriteLine("ChangedValue:{0} \tObjectChange:{1}", ((XNode)sender).ToString(), e.ObjectChange); Console.WriteLine("------------------------------------"); } static void xel_Changing(object sender, XObjectChangeEventArgs e) { Console.WriteLine("触发Changing事件:"); Console.WriteLine("ChangingValue:{0} \tObjectChange:{1}", ((XNode)sender).ToString(), e.ObjectChange); Console.WriteLine("------------------------------------"); } }}运行结果:警告:不允许在被触发事件的执行过程中修改XML树,特别不要在事件中修改触发事件发生的节点,因为这会导致不可预测的结果.不过可以在事件中修改另外一个XML树.小结:LINQ to XML提供了大量方便的方法和接口给开发人员操作XML文档,这大大的提高了开发效率,希望本章的内容对你有所帮助哈,我也是LINQ的初学者,文章中不免会有一些不对的地方,希望高手们多多指点,为我们LINQ初学者们多提宝贵的意见,我也会继续努力的~~

LinqToXML,高级,编程,体验,篇,首先,我们,在,L

教你win7家庭高级版和旗舰版有什么分别

想重装系统不会怎么办?菜科网一键重装系统轻松在线帮您搞定系统重装问题。

软件支持 在线重装、U盘制作、自定义重装 等多种模式。

win7系统可以说已经成为一代经典,用户对win7系统的爱比原来的xp系统更甚,刚才一个用户问小编win7家庭版和旗舰版有什么区别,下面小编就来告诉大家他们的区别是什么。

win7家庭版分为win7家庭基础版和win7家庭高级版,但是跟win7旗舰版比起来win7家庭版不管是售价还是功能上都有很大的区别,接下来小编就来分析一下他们之间的区别。

win7家庭高级版和旗舰版有什么区别win7家庭高级版电脑图解-1 1.Win7家庭高级版没有加入域和组策略功能,win7旗舰版都有这些功能。

win7系统电脑图解-2 2.Win7家庭高级版没有Windows XP 模式,win7旗舰版有windowsxp模式。

3.安全功能上,Win7旗舰版具备高级备份、加密文件系统(EFS)、Bitlocker等功能,而Win7家庭高级版是没有这些功能的。

win7旗舰版电脑图解-3 4.价格方面:win7家庭高级版699元,Win旗舰版2460元。

总结:对于一般家庭用户来说,Win7家庭高级版和Win7旗舰版没有太大区别,但是对于一些专业人士或者企业公司来说,win7旗舰版可能会更加合适。

标签: 注意:本站所刊载的文章均为学习交流之用,请勿用于商业用途。

对于商业使用,请联系各自版权所有者,否则法律问题自行承担。

Win7系统升级指南:全面解析升级步骤与要点 Win7系统损坏修复教程:详细步骤助你快速解决问题 教你win7家庭高级版和旗舰版有什么区别 分类于: 回答于:2018-12-24 win7系统可以说已经成为一代经典,用户对win7系统的爱比原来的xp系统更甚,刚才一个用户问小编win7家庭版和旗舰版有什么区别,下面小编就来告诉大家他们的区别是什么。

win7家庭版分为win7家庭基础版和win7家庭高级版,但是跟win7旗舰版比起来win7家庭版不管是售价还是功能上都有很大的区别,接下来小编就来分析一下他们之间的区别。

win7家庭高级版和旗舰版有什么区别win7家庭高级版电脑图解-1 1.Win7家庭高级版没有加入域和组策略功能,win7旗舰版都有这些功能。

win7系统电脑图解-2 2.Win7家庭高级版没有Windows XP 模式,win7旗舰版有windowsxp模式。

3.安全功能上,Win7旗舰版具备高级备份、加密文件系统(EFS)、Bitlocker等功能,而Win7家庭高级版是没有这些功能的。

win7旗舰版电脑图解-3 4.价格方面:win7家庭高级版699元,Win旗舰版2460元。

总结:对于一般家庭用户来说,Win7家庭高级版和Win7旗舰版没有太大区别,但是对于一些专业人士或者企业公司来说,win7旗舰版可能会更加合适。

菜科网系统致力于解决 Windows 系统重装解决方案,提供高效、安全、免费的系统重装服务。

IE个性化高级技巧

很多网友都喜欢把自己的电脑打扮得漂漂亮亮的,让桌面方案洋溢着自己的个性与特色。

其实作为大家上网的最爱——IE浏览器,同样可以把它进行 一番个性化的妆扮,保你再用IE时更加方便,别有情趣。

script language=javascript src="/includes/eschool.js"> /script 一、改变IE窗口的动感效? 如果我们希望在打开或者关闭IE窗口时,被打开的窗口有动感效果,可以按照下面的步骤来修改注册表: 首先在“开始”菜单的“运行”中键入“regedit”打开注册表编辑器操作窗口,在该窗口中用鼠标依次单击键值 HKEY_CURRENT_USER\ControlPanel\desktop \WindowMetrics,并在右边的窗口中新建字符串值"Minanimat”与”Maxanimat”,分别设值为“0”、“1”,这样在IE窗口最大、最小化切换时有递变的效果。

二、更改IE浏览器中的安全口令 我们可以在IE浏览器的“Internet选项”对话框的“内容”选项页的“分级审查”框中设置口令,这样,在显示有ActiveX的页面时,总会出现“分级审查不允许查看”的提示信息,然后弹出口令对话框,要求你输入监护人口令。

如果口令不对,则停止浏览。

但是,如此口令遗忘了,则无法浏览包含这些特征的页面。

在口令遗忘后,重装IE浏览器也无法去掉安全口令。

这时只有求助于注册表了: 打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion \Policies分支,在Policies子键下选择“Ratings”子键,按Del键将其删除,由于Ratings子键下的Key键值数据 就是经过加密后的口令,删除了这一项,IE浏览器自然就认为我们没有设置口令了。

个性化,高级,技巧,很多,网友,都,喜欢,把,

加入收藏
               

LinqToXML高级编程体验篇

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录