Linq to XML中Descendants和Elements有什么区别?

199

我在VS IntelliSense中遇到了这两个关键词。我尝试使用谷歌搜索它们之间的区别,但没有得到清晰的答案。对于小到中等大小的XML文件,哪一个拥有最佳性能?谢谢

2个回答

321

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 еҸҜд»ҘиҺ·еҫ—жӣҙеҘҪзҡ„жҖ§иғҪгҖӮ


1
很棒的答案,我一直认为这两个词有点颠倒了,正如你所描述的那样(当描述Elements时,你总是需要使用“descendant”这个词,而在谈论Descendants时则更加可选)。 - Mattisdada

24

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接