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 和简单的祖先和后代之间的空格有啥区别?

XML中的元素和节点有啥区别?

@ViewChild 和 @ContentChild 有啥区别?

Linq:Select 和 Where 有啥区别

在按属性选择时,后代中的XML到Linq元素会出现对象引用错误

descendant和offspring有啥区别