Linq到XML Descendants和Elements的区别是什么?

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

Elements只能find那些直接后代的元素,即直接的孩子。

Descendantsfind任何级别的儿童,即儿童,大孩子等…


这是一个演示不同的例子:

 <?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); } 

结果:

要素:testing1
元素:testing3
后裔:testing1
后裔:testing2
后裔:testing3

如果你知道你想要的元素是直接的孩子,那么如果你使用Elements而不是Descendants你将会获得更好的performance。

Descendants将search指定名称的当前元素的整个子树(或者如果没有提供名称,将返回树的扁平版本),而Elements只search当前元素的直接子元素。