Linq to XML 后代和元素有啥区别
Posted
技术标签:
【中文标题】Linq to XML 后代和元素有啥区别【英文标题】:What is the difference between Linq to XML Descendants and ElementsLinq to XML 后代和元素有什么区别 【发布时间】:2011-04-11 22:13:30 【问题描述】:我在 VS IntelliSense 中遇到了这两个关键字。我试图用谷歌搜索它们之间的区别,但没有得到明确的答案。其中哪一个对中小型 XML 文件具有最佳性能。谢谢
【问题讨论】:
【参考方案1】:Elements
仅查找那些直接后代元素,即直接子元素。
Descendants
查找任何级别的孩子,即孩子、孙子等等...
下面是一个演示差异的示例:
<?xml version="1.0" encoding="utf-8" ?>
<foo>
<bar>Test 1</bar>
<baz>
<bar>Test 2</bar>
</baz>
<bar>Test 3</bar>
</foo>
代码:
XDocument doc = XDocument.Load("input.xml");
XElement root = doc.Root;
foreach (XElement e in root.Elements("bar"))
Console.WriteLine("Elements : " + e.Value);
foreach (XElement e in root.Descendants("bar"))
Console.WriteLine("Descendants : " + e.Value);
结果:
元素:测试 1 元素:测试 3 后代:测试1 后代:测试2 后代:测试3如果你知道你想要的元素是直接子元素,那么如果你使用Elements
而不是Descendants
,你将获得更好的性能。
【讨论】:
很好的答案,我一直认为这两者有点倒退,正如您在描述中突出显示的那样(在描述元素时,您总是需要使用“后代”这个词,因为它在说话时更具选择性关于后代 【参考方案2】:Descendants
将在当前元素的整个子树中搜索指定的名称(或者如果没有提供名称,将返回树的扁平版本),而Elements
仅搜索当前元素的直接子元素。
【讨论】:
以上是关于Linq to XML 后代和元素有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
Jquery .find 和简单的祖先和后代之间的空格有啥区别?
@ViewChild 和 @ContentChild 有啥区别?