Linq to XML后代和元素之间有什么区别


181

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

Answers:


292

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


很好的答案,我一直以为您的描述中突出显示了两者的差异(描述元素时,您总是需要使用“后代”一词,因为在谈论后代时,它是可选的
Mattisdada 2016年

16

Descendants将在当前元素的整个子树中搜索指定的名称(或者如果未提供名称,则返回树的展平版本),而Elements仅搜索当前元素的直接子级。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.