XML和LINQ实战详解

17 篇文章 0 订阅

基础知识
1. LINQ的读法:(1)lin k (2)lin q
2. LINQ的关键词:from, select, in, where, group by, order by …
3. LINQ的注意点:必须以select或者是group by 结束。
4. LINQ的语义:
from 临时变量 in 集合对象或数据库对象
where 条件表达式
[order by条件]
select 临时变量中被查询的值
[group by 条件]

    LINQ的查询返回值的类型是临时变量的类型,可能是一个对象也可能是一个集合。并且LINQ的查询表达式是在最近一次创建对象时才被编译的。LINQ的查询一般跟var关键字一起联用 (什么是var?匿名对象) 。以下的两个查询表达式是一样的效果:

var q = from name in methods 
where (name.Name.Length > 15)
select name;

IEnumerable<MethodInfo> p = from name in methods
where (name.Name.Length > 15)
select name;

   所以这样的我们就可以对LINQ的查询表达式进行嵌套查询:

var q = from t in 
(from name in methods
where (!name.IsVirtual)
select name)
where (t.Name.Length > 15)
select t.Name;

   5. LINQ的全称:Language-Integrated Query
   6. LINQ的分类:LINQ to Object, LINQ to XML, LINQ to SQL, LINQ to ADO.NET

   对于LINQ to SQL方面的文章网路上已经有很多了,我将不再讨论这方面的内容。下面我主要讨论的是LINQ to XML方面的内容,顺便提一下LINQ to Object。 

LINQ to Object

MethodInfo[] methods = typeof(string).GetMethods(); 
var q = from t in methods
where (t.Name.Length > 15)
select t;

   LINQ to Object主要是基于.NET框架里的Lambda表达式来实现的,因此上面的代码运行结果等同于下面的代码:

MethodInfo[] methods = typeof(string).GetMethods(); 
var q = methods
.Where((method) => method.Name.Length > 15)
.Select((name) => name.Name);

相当的简单,只要先生成一个XElement对象然后把它Add到当前节点对象就可以了。进一步我们仔细查看一下XElement可以添加节点的方法。可以看到一共有Add, AddAfterSelf, AddAnnotation, AddBeforeSelf, AddFirst这五个方法。在默认情况下,Add的操作是将新节点作为被插入节点的最后一个孩子节点插入的,而AddFirst正好相反。AddAfterSelf和AddBeforeSelf则是将节点作为兄弟节点插入的,这里要注意的是调用这两个方法的时候不能以根节点作为被插入节点,因为XML文档规定只能有一个根节点。最后,我们来看一下AddAnnotation这个方法。AddAnnotation是为一个节点添加一个相关的评注的类对象。这个类对象可以用户自己定义,所以通过这个方法我们可以扩展XML文档对象的功能,例如根据节点来获取类对象的功能。下面是一段引用自msdn的代码:

  
  
public class MyAnnotation
{
private string tag;
public string Tag { get { return tag; } set { tag = value; } }
public MyAnnotation(string tag)
{
this.tag = tag;
}
}
… …
MyAnnotation ma = new MyAnnotation("T1");
XElement root = new XElement("Root", "content");
root.AddAnnotation(ma);
MyAnnotation ma2 = (MyAnnotation)root.Annotation<MyAnnotation>();

    接下来我们再看一下如何利用LINQ to XML来更新XML的信息。对XML文档进行更新主要包括两个方面,一个方面是对元素属性和值得更新;另一方面是对元素名称的更新。在一般情况下,我们通常只对元素的属性和值进行更新,代码如下:

XElement xelem = XElement.Load(@"example.xml"); 
var partNos = from item in xelem.Descendants("Item")
where item.Attribute("PartNumber").Value == "872-AA"
select item;

foreach (XElement node in partNos)
{
node.Value = "Hello";
Console.WriteLine(node.Value);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值