Por supuesto para correr los ejemplos hay que crear los tipos de datos necesarios, todas las colecciones son de tipo List<>
Escribir (Linq a XML):
1: List<Pelicula> peliculas = new PeliculaTA().Retrieve();
2: var xmlArch =
3: new XElement("Peliculas",
4: from m in peliculas
5: select new XElement("Pelicula",
6: new XElement("Titulo", m.Titulo),
7: new XElement("Director", m.Director),
8: new XElement("Estrenado", m.Estrenado),
9: new XElement("Actores",
10: from a in m.Actores
11: select new XElement("Actor",
12: new XElement("Nombre", a.Nombre),
13: new XElement("Nacimiento", a.Nacimiento),
14: new XElement("Roles",
15: from r in a.Roles
16: select new XElement("Rol",
17: new XElement("NombrePelicula", r.Pelicula),
18: new XElement("NombreRol", r.NombreRol)))))));
19: File.WriteAllText("peliculas.xml", xmlArch.ToString());
Leer (XML a Linq):
1: XElement xmlArch = XElement.Load("peliculas.xml");
2: var peliculas =
3: from m in xmlArch.Descendants("Pelicula")
4: select new Pelicula {
5: Titulo = (string)m.Element("Titulo"),
6: Director = (string)m.Element("Director"),
7: Estrenado = (DateTime)m.Element("Estrenado"),
8: Actores = (from c in m.Elements("Actores").Descendants("Actor")
9: select new Actor {
10: Nombre = (string)c.Element("Nombre"),
11: Nacimiento = (DateTime)c.Element("Nacimiento"),
12: Roles = (from r in c.Elements("Roles").Descendants("Rol")
13: select new Rol {
14: Pelicula = (string)r.Element("NombrePelicula"),
15: NombreRol = (string)r.Element("NombreRol")
16: }).ToList()
17: }).ToList()
18: };
El resultado de el último ejemplo es un Enumerable<pelicula> el cual hay que recorrer por ejemplo con foreach para obtener resultados.
Para aprender mas acerca de Linq visita:
Lista de artículos acerca de Linq
Para aprender más sobre el uso de XML en .Net Framework visita:
Lista de artículos acerca del uso de XML en .Net Framework
Funciona? Si hay más de una película en el xml las guarda en "películas", es tipo lista?. Tengo un problema similar y uso tu código pero no me funciona correctamente.
ResponderEliminar