none
Pasar datos al programa desde un fichero XML c# RRS feed

  • Pregunta

  • Buenos días,

    Estoy intentando dar con la solución sobre como guardar cada dato proveniente de un .xml en XDocument y XElement para luego poder usarlos como string en un DropDownList.

    Por el momento tengo este código, aunque sé que está mal es por hacer una idea de lo que estoy haciendo:

    public void RellenarDropDownList(string provincia) { List <XElement> elementos = doc.Descendants("Provincias").ToList(); List <XElement> localidades = (from loc in elementos.Descendants("Provincia") select loc).ToList(); foreach (XElement elem in localidades) { if (elem.Value == provincia) { // Aquí debería almacenar cada valor de tag en una variable } } }

    // Este es un extracto de mi XML, del cual tengo que coger cada Provincia y cada Localidad para el DropDownList

    <Provincias> <Provincia Nombre="MADRID"> <Localidad Nombre="ALCALA DE HENARES"> <Supermercado> <Direccion>c/ juan ramon jimenez s/n</Direccion> <CP>28801</CP> <Telefono>918781002</Telefono> <Horario>09:00 - 21:30</Horario> <Parking>si</Parking> </Supermercado> </Provincia> </Provincias>


    Edited: Perdonad, porque me equivoqué de categoría, quizá debería haber puesto Desarrollo C#

    Saludos y gracias de antemano,


    José Manuel de la Cruz



    martes, 24 de noviembre de 2015 11:43

Respuestas

  • Buenas Jose.

    Este es el código para generar un objeto aparir de un XML

    public static List<T> XmlToList<T>(string path) where T : new()
            {
                
                IList<T> dynamicList = new List<T>();
                Type tipo = typeof(T);
                using (var reader = new StreamReader(path))
                {
                    XmlSerializer deserializer = new XmlSerializer(typeof(List<T>), new XmlRootAttribute(tipo.Name));
                    dynamicList = deserializer.Deserialize(reader) as List<T>;
                }
                return dynamicList.ToList();
            }

    Tienes que considerar que el objeto T tiene que tener las propiedades con el mismo nombre que tienen en el XML.

    Saludos

    Aldo Flores Reyes

    @alduar

    http://alduar.blogspot.com

    • Marcado como respuesta JM de la Cruz miércoles, 25 de noviembre de 2015 15:33
    martes, 24 de noviembre de 2015 12:45

Todas las respuestas

  • Buenas Jose.

    Este es el código para generar un objeto aparir de un XML

    public static List<T> XmlToList<T>(string path) where T : new()
            {
                
                IList<T> dynamicList = new List<T>();
                Type tipo = typeof(T);
                using (var reader = new StreamReader(path))
                {
                    XmlSerializer deserializer = new XmlSerializer(typeof(List<T>), new XmlRootAttribute(tipo.Name));
                    dynamicList = deserializer.Deserialize(reader) as List<T>;
                }
                return dynamicList.ToList();
            }

    Tienes que considerar que el objeto T tiene que tener las propiedades con el mismo nombre que tienen en el XML.

    Saludos

    Aldo Flores Reyes

    @alduar

    http://alduar.blogspot.com

    • Marcado como respuesta JM de la Cruz miércoles, 25 de noviembre de 2015 15:33
    martes, 24 de noviembre de 2015 12:45
  • hola

    pero porque haces un foreach si podrias armar un linq

    Consultas básicas (LINQ to XML)

    en una sola query linq podrias seleccionar los nodos y en el select asignar los valores a la nueva entidad

    la pregunta seria, conoces sobre linq ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 24 de noviembre de 2015 13:04
  • Buenas Leandro,

    La verdad es que no conozco mucho sobre Linq, y con XDocument y XElement tengo un lío gordo montado.

    ¿Con una consulta Linq podría directamente almacenar todos los datos en una o dos List<XElement o string>?

    Saludos,


    José Manuel de la Cruz

    martes, 24 de noviembre de 2015 13:08
  • Hola Aldo,

    Muchas gracias por la respuesta, lo único que no entiendo esa forma de hacerlo (soy bastante novato en esto).

    ¿Con esto generarías ya una lista de elementos?

    Saludos,


    José Manuel de la Cruz

    martes, 24 de noviembre de 2015 13:10
  • Buenas Jose,

    Si por cada elemento genera un item de la Lista.

    Saludos

    Aldo Flores Reyes

    @alduar

    martes, 24 de noviembre de 2015 13:36