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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top