快速业务通道

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

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

导航/查询X-DOM

就像你可能期望的那样, XNode和XContainer类定义了方法和属性来测量X-DOM树. 与常规的DOM不同的是, 这些函数并不会返回实现了IList<T>的集合, 而是返回了一个单一值或者一个实现了IEnumerable<T>的序列. 基于这个你可以执行一个LINQ查询或者使用foreach来做枚举. 这同时也允许你使用熟悉的LINQ查询语法来执行简单的导航任务或者高级查询.

在X-DOM中, 元素和属性名都是大小写敏感的, 这与XML是一致的.

FirstNode, LastNode与Nodes

FirstNode与LastNode允许你直接访问第一个或者最后一个子节点; Nodes返回所有的子节点并形成一个序列. 这三个方法只用于直系的后代节点.

检索元素

Elements方法返回类型为XElement的子节点. 例如:

   1: var bench = new XElement ("bench",
   2:               new XElement ("toolbox",
   3:                 new XElement ("handtool", "Hammer"),
   4:                 new XElement ("handtool", "Rasp")
   5:               ),
   6:               new XElement ("toolbox",
   7:                 new XElement ("handtool", "Saw"),
   8:                 new XElement ("powertool", "Nailgun")
   9:               ),
  10:               new XComment ("Careful with the nailgun")
  11:             );
  12:
  13: foreach (XElement e in bench.Elements( ))
  14:   Console.WriteLine (e.Name + "=" + e.Value);
  15:
  16: // 结果: toolbox=HammerRasp
  17:            toolbox=SawNailgun

以下的LINQ查询用于查询包含nail gun的toolbox:

   1: IEnumerable<string> query =
   2:   from toolbox in bench.Elements( )
   3:   where toolbox.Elements( ).Any
   4:     (tool => tool.Value == "Nailgun")
   5:   select toolbox.Value;
   6:
   7: RESULT: { "SawNailgun" }

Elements等价于Nodes上面的LINQ查询, 我们之前的查询也可以被写为:

   1: from toolbox in bench.Nodes().OfType<XElement>()
   2: where ...

接下来的例子使用一个SelectMany查询检索hand tools:

   1: IEnumerable<string> query =
   2:   from toolbox in bench.Elements( )
   3:   from tool in toolbox.Elements( )
   4:   where tool.Name == "handtool"
   5:   select tool.Value;
   6:
   7: RESULT: { "Hammer", "Rasp", "Saw" }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号