快速业务通道

LINQ学习笔记:导航和查询X-DOM

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-14

Elements也可以只返回给定名称的元素, 例如:

   1: int x = bench.Elements ("toolbox").Count();      // 2

这等价于:

   1: int x = bench.Elements()
   2:              .Where (e => e.Name == "toolbox")
   3:              .Count();                                                  // 2
   4:

Elements还定义了一个扩展方法接受IEnumerable<XContainer>参数. 更精确的说, 它接受了此种类型的参数:

   1: IEnumerable<T> where T : XContainer

这让其可以和元素序列一起工作, 使用这个方法我们可以重写查找hand tools的查询:

   1: from tool in bench.Elements ("toolbox")
   2:                   .Elements ("handtool")
   3: select tool.Value.ToUpper( );

第一个Elements绑定到XContainer上, 第二个则绑定到扩展方法上.

读取一个单一的元素

方法Element(单数)返回匹配给定名称的第一个元素. Element对于简单的导航是非常有用的, 例如:

   1: var settings = XElement.Load ("databaseSettings.xml");
   2:
   3: string cx = settings.Element ("database")
   4:                     .Element ("connectString")
   5:                     .Value;

Element的作用相当于调用Elements然后再应用LINQ的FirstOrDefault并给定一个名称作为匹配断言. 如果没有任何元素匹配到, 则Element返回null.

如果元素xyz不存在, 那么Element(”xyz”).Value将会抛出一个NullReferenceException异常. 如果你倾向于使用null代替异常, 可以将XElement转换成string而不是调用它的Value属性, 如下:

   1: string xyz =
   2:   (string) settings.Element("xyz");

XElement定义了一个显示的string转换正式为了这个目的.

递归功能

XContainer同时也定义了Descendants和DescendantNodes方法, 它们递归地返回子元素或者子节点.Descendant接受一个可选的元素名, 会到我们之前的例子, 我们可以使用Descendants去查找所有的hand tools:

   1: Console.WriteLine
   2:   (bench.Descendants ("handtool").Count( ));   // 3

不管是父节点还是叶节点都包含在整体横切中. 以下的查询取得所有包含单词”careful”, 存在于X-DOM任何地方的注释节点:

   1: IEnumerable<string> query =
   2:   from c in bench.DescendantNodes( ).OfType<XComment>( )
   3:   where c.Value.Contains ("careful")
   4:   orderby c.Value
   5:   select c.Value;

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号