Como faço para obter uma lista de elementos filhos do objeto Xdocument?
-
23-09-2019 - |
Pergunta
Estou tentando obter todos os elementos de "vídeo" e seus atributos de um arquivo XML que se parece com o seguinte:
<?xml version="1.0" encoding="utf-8" ?>
<videos>
<video title="video1" path="videos\video1.wma"/>
<video title="video2" path="videos\video2.wma"/>
<video title="video3" path="videos\video3.wma"/>
</videos>
O seguinte selecionará apenas o nó raiz e todas as crianças. Eu gostaria de colocar todos os elementos de 'vídeo' no Ienumerable. Alguém pode me dizer o que estou fazendo de errado?
IEnumerable<XElement> elements = from xml in _xdoc.Descendants("videos")
select xml;
O exposto acima retorna uma coleção com um comprimento == 1. Ele contém o elemento raiz e todas as crianças.
Solução
Você deseja selecionar descendentes ("vídeo"). "Vídeos" parece ser sua entrada raiz, da qual há 1 elemento. Os elementos internos dos vídeos são o que você deseja consultar.
Exemplo:
var query = from video in document.Descendants("video")
select new
{
Title = video.Attribute("title").Value,
Path = video.Attribute("path").Value
};
Isso oferece a você um tipo de tipo anônimo com duas propriedades de string. Caso contrário, você pode simplesmente selecionar "vídeo" e obter um IEnumerable<XElement>
, que você analisaria ainda mais conforme necessário.