Qual é a diferença entre Descendentes e Elementos de Linq para XML


181

Eu encontrei essas duas palavras-chave no VS IntelliSense. Tentei pesquisar a diferença entre eles e não obtive uma resposta clara. Qual deles tem o melhor desempenho com arquivos XML pequenos a médios. obrigado

Respostas:


292

Elementsencontra apenas os elementos que são descendentes diretos , ou seja, filhos imediatos.

Descendants encontra crianças em qualquer nível, ou seja, filhos, netos, etc.


Aqui está um exemplo demonstrando a diferença:

<?xml version="1.0" encoding="utf-8" ?>
<foo>
    <bar>Test 1</bar>
    <baz>
        <bar>Test 2</bar>
    </baz>
    <bar>Test 3</bar>
</foo>

Código:

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

Resultado:

Elementos: Teste 1
Elementos: Teste 3
Descendentes: Teste 1
Descendentes: Teste 2
Descendentes: Teste 3

Se você sabe que os elementos que deseja são filhos imediatos, obterá melhor desempenho se usar em Elementsvez de Descendants.


Grande resposta, eu sempre pensei que os dois eram um pouco para trás como destaque na sua descrição (ao descrever Elements, você sempre precisa usar a palavra "descendente", onde, uma vez que é um pouco mais opcional quando se fala de descendentes
Mattisdada

16

Descendantsprocurará na subárvore inteira do elemento atual o nome especificado (ou retornará uma versão achatada da árvore se nenhum nome for fornecido), enquanto Elementspesquisa apenas os filhos imediatos do elemento atual.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.