LINQ学习笔记:导航和查询X-DOM
导航/查询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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |