¿Cómo obtengo una lista de elementos infantiles del objeto XDocument?
-
23-09-2019 - |
Pregunta
Estoy tratando de obtener todos los elementos de "video" y sus atributos de un archivo XML que se ve así:
<?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>
Lo siguiente solo seleccionará el nodo raíz y todos los niños. Me gustaría llevar todos los elementos de 'video' en el Ienumerable. ¿Alguien puede decirme qué estoy haciendo mal?
IEnumerable<XElement> elements = from xml in _xdoc.Descendants("videos")
select xml;
Lo anterior devuelve una colección con una longitud == 1. Contiene el elemento raíz y todos los niños.
Solución
Desea seleccionar descendientes ("video"). "Videos" parece ser su entrada de raíz, de la cual hay 1 elemento. Los elementos internos de los videos son lo que quieres consultar.
Ejemplo:
var query = from video in document.Descendants("video")
select new
{
Title = video.Attribute("title").Value,
Path = video.Attribute("path").Value
};
Eso te da un tipo de tipo anónimo con dos propiedades de cadena. De lo contrario, simplemente podría seleccionar "video" y obtener un IEnumerable<XElement>
, que analizarías aún más según sea necesario.