Linq与XML Descendants和Elements之间有什么区别

Luk*_*101 174 .net c# xml linq-to-xml

我在VS IntelliSense中遇到过这两个关键字.我试图谷歌搜索他们之间的差异,并没有得到一个明确的答案.其中哪一个具有中小型XML文件的最佳性能.谢谢

Mar*_*ers 282

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>
Run Code Online (Sandbox Code Playgroud)

码:

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);
}
Run Code Online (Sandbox Code Playgroud)

结果:

Elements : Test 1
Elements : Test 3
Descendants : Test 1
Descendants : Test 2
Descendants : Test 3

如果您知道您想要的元素是直接孩子,那么如果您使用Elements而不是,您将获得更好的表现Descendants.


Ada*_*son 16

Descendants将搜索当前元素的整个子树以获取指定的名称(如果未提供名称,则将返回树的扁平版本),而Elements仅搜索当前元素的直接子元素.