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