none
Error convirtiendo .Xml a lista de objetos RRS feed

  • Pregunta

  • Buen dia, estoy tratando de convertir el siguiente xml a una lista de objetos

    <?xml version="1.0" standalone="yes"?>
    <dataroot xmlns:od="urn:schemas-microsoft-com:officedata">
    <Hoja1><tituloPregunta>¿Cúal&#160;es&#160;el&#160;valor&#160;humano,&#160;que&#160;se&#160;manifiesta&#160;en&#160;el buen&#160;trato&#160;hacia&#160;las&#160;distintas&#160;personas&#160;con&#160;las&#160;que&#160;se&#160;comparte&#160;la&#160;vida:&#160;padres,&#160;hermanos,&#160;abuelos,&#160;tíos,&#160;primos,&#160;maestros&#160;y&#160;compañeros,&#160;quienes&#160;como&#160;personas&#160;que&#160;son&#160;merecen&#160;ser&#160;tratados&#160;con&#160;palabras&#160;y&#160;actitudes&#160;respetuosas&#160;a&#160;su&#160;condición&#160;humana?</tituloPregunta><opcion1>Responsabilidad</opcion1><opcion2>Amistad</opcion2><opcion3>Respeto</opcion3><opcion4>Equidad</opcion4><opcionCorrecta>Respeto</opcionCorrecta></Hoja1>
    <Hoja1><tituloPregunta>¿Cúal&#160;es&#160;el&#160;sentimiento&#160;de&#160;afecto&#160;universal que&#160;se&#160;tiene&#160;hacia&#160;una&#160;persona,&#160;animal&#160;o&#160;cosa&#160;y&#160;es&#160;expresado&#160;a&#160;través&#160;de&#160;acciones,&#160;mensajes,&#160;declaraciones&#160;y&#160;poemas?</tituloPregunta><opcion1>Equidad</opcion1><opcion2>Libertad</opcion2><opcion3>Paz</opcion3><opcion4>Amor</opcion4><opcionCorrecta>Amor</opcionCorrecta></Hoja1>
    <Hoja1><tituloPregunta>¿Cuál&#160;es&#160;la&#160;facultad&#160;o&#160;capacidad&#160;del&#160;el&#160;ser&#160;humano&#160;de&#160;actuar&#160;o&#160;no&#160;actuar&#160;siguiendo según&#160;su&#160;criterio&#160;y&#160;voluntad.&#160;&#160;Es&#160;también&#160;el estado&#160;o&#160;la&#160;condición en&#160;que&#160;se&#160;encuentra&#160;una&#160;persona&#160;que&#160;no&#160;se&#160;encuentra&#160;prisionera,&#160;coaccionada&#160;o&#160;sometida&#160;a&#160;otra?</tituloPregunta><opcion1>Libertad</opcion1><opcion2>Tolerancia</opcion2><opcion3>Amistad</opcion3><opcion4>Paz</opcion4><opcionCorrecta>Libertad</opcionCorrecta></Hoja1>
    <Hoja1><tituloPregunta>¿Cúal&#160;es&#160;el&#160;valor&#160;moral que&#160;implica&#160;el respeto&#160;íntegro&#160;hacia&#160;el&#160;otro,&#160;hacia&#160;sus&#160;ideas,&#160;prácticas&#160;o&#160;creencias,&#160;independientemente&#160;de&#160;que&#160;choquen&#160;o&#160;sean&#160;diferentes&#160;de&#160;las&#160;nuestras?</tituloPregunta><opcion1>Amor</opcion1><opcion2>Honestidad</opcion2><opcion3>Respeto</opcion3><opcion4>Tolerancia</opcion4><opcionCorrecta>Tolerancia</opcionCorrecta></Hoja1>
    <Hoja1><tituloPregunta>¿Cuál&#160;es&#160;el&#160;valor&#160;que&#160;se&#160;caracteriza&#160;por&#160;el&#160;uso&#160;de&#160;la&#160;imparcialidad&#160;para&#160;reconocer&#160;el&#160;derecho&#160;de&#160;cada&#160;uno,&#160;utilizando&#160;la&#160;equivalencia&#160;para&#160;ser&#160;iguales?</tituloPregunta><opcion1>Responsabilidad</opcion1><opcion2>Equidad</opcion2><opcion3>Paz</opcion3><opcion4>Honestidad</opcion4><opcionCorrecta>Equidad</opcionCorrecta></Hoja1>
    <Hoja1><tituloPregunta>Se&#160;define&#160;como&#160;un&#160;estado&#160;a&#160;nivel&#160;social&#160;o&#160;personal,&#160;en&#160;el&#160;cual&#160;se&#160;encuentran&#160;en&#160;equilibrio&#160;y&#160;estabilidad&#160;las&#160;partes&#160;de&#160;una&#160;unidad.&#160;También&#160;se&#160;refiere&#160;a&#160;la&#160;tranquilidad&#160;mental&#160;de&#160;una&#160;persona&#160;o&#160;sociedad</tituloPregunta><opcion1>Honestidad</opcion1><opcion2>Libertad</opcion2><opcion3>Responsabilidad</opcion3><opcion4>Paz</opcion4><opcionCorrecta>Paz</opcionCorrecta></Hoja1>
    <Hoja1><tituloPregunta>Constituye&#160;una&#160;cualidad&#160;humana&#160;que&#160;consiste&#160;en&#160;comportarse&#160;y&#160;expresarse&#160;con sinceridad y coherencia,&#160;respetando&#160;los&#160;valores&#160;de&#160;la justicia y&#160;la verdad.</tituloPregunta><opcion1>Honestidad</opcion1><opcion2>Amor</opcion2><opcion3>Amistad</opcion3><opcion4>Libertad</opcion4><opcionCorrecta>Honestidad</opcionCorrecta></Hoja1>
    <Hoja1><tituloPregunta>Es&#160;el cumplimiento&#160;de&#160;las&#160;obligaciones&#160;o&#160;cuidado&#160;al&#160;hacer&#160;o&#160;decidir&#160;algo,&#160;o&#160;bien&#160;una&#160;forma&#160;de&#160;responder&#160;que&#160;implica&#160;el&#160;claro&#160;conocimiento&#160;de&#160;que&#160;los&#160;resultados&#160;de&#160;cumplir&#160;o&#160;no&#160;las&#160;obligaciones,&#160;recaen&#160;sobre&#160;uno&#160;mismo.</tituloPregunta><opcion1>Libertad</opcion1><opcion2>Paz</opcion2><opcion3>Responsabilidad</opcion3><opcion4>Equidad</opcion4><opcionCorrecta>Responsabilidad</opcionCorrecta></Hoja1>
    <Hoja1><tituloPregunta> es&#160;una&#160;relación&#160;afectiva&#160;que&#160;se&#160;puede&#160;establecer&#160;entre&#160;dos&#160;o&#160;más&#160;individuos,&#160;a&#160;la&#160;cual&#160;están&#160;asociados&#160;valores&#160;fundamentales&#160;como&#160;el&#160;amor,&#160;la&#160;lealtad,&#160;la&#160;solidaridad,&#160;la&#160;incondicionalidad,&#160;la&#160;sinceridad&#160;y&#160;el&#160;compromiso,&#160;y&#160;que&#160;se&#160;cultiva&#160;con&#160;el&#160;trato&#160;asiduo&#160;y&#160;el&#160;interés&#160;recíproco&#160;a&#160;lo&#160;largo&#160;del&#160;tiempo.</tituloPregunta><opcion1>Tolerancia</opcion1><opcion2>Amistad</opcion2><opcion3>Libertad</opcion3><opcion4>Amor</opcion4><opcionCorrecta>Amistad</opcionCorrecta></Hoja1>
    <Hoja1><tituloPregunta>Nos&#160;permite&#160;conocernos&#160;a&#160;nosotros&#160;mismos,&#160;saber&#160;que&#160;tenemos&#160;defectos&#160;y&#160;aceptarlos,&#160;entender&#160;que&#160;siempre&#160;se&#160;puede&#160;sacar&#160;una&#160;lección&#160;de&#160;todo&#160;lo&#160;que&#160;ocurre&#160;a&#160;nuestro&#160;alrededor.</tituloPregunta><opcion1>Amistad</opcion1><opcion2>Honestidad</opcion2><opcion3>Paz</opcion3><opcion4>Tolerancia</opcion4><opcionCorrecta>Humildad</opcionCorrecta></Hoja1>
    </dataroot>

    Y lo estoy organizando en el siguiente ciclo

     XElement element = XElement.Load("XmlPreguntas.xml");
                preguntas = new List<Preguntas>();
                foreach (XElement item in element.Elements())
                {
                   
                    preguntas.Add(new Preguntas
                    {
                        tituloPregunta = (string)item.Attribute("tituloPregunta"),
                        opcion1 = (string)item.Attribute("opcion1"),
                        opcion2 = (string)item.Attribute("opcion2"),
                        opcion3 = (string)item.Attribute("opcion3"),
                        opcion4 = (string)item.Attribute("opcion4"),
                        opcionCorrecta = (string)item.Attribute("opcionCorrecta")
                    });
                }

    Aunque da las 10 vueltas todos los elementos quedan en null, ¿que puedo estar haciendo mal?

    De antemano gracias por la ayuda

    jueves, 17 de mayo de 2018 1:13

Respuestas

  • Deleted
    jueves, 17 de mayo de 2018 2:11
  • Mucho más fácil con clases y XmlSerializer.

        [XmlRoot("dataroot")]
        public class PreguntasRaiz
        {
            [XmlElement("Hoja1")]
            public List<Pregunta> Preguntas { get; set; }
        }
    
        public class Pregunta
        {
            [XmlElement("tituloPregunta")]
            public string Titulo { get; set; }
    
            [XmlElement("opcion1")]
            public string Opcion1 { get; set; }
    
            [XmlElement("opcion2")]
            public string Opcion2 { get; set; }
    
            [XmlElement("opcion3")]
            public string Opcion3 { get; set; }
    
            [XmlElement("opcion4")]
            public string Opcion4 { get; set; }
    
            [XmlElement("opcionCorrecta")]
            public string OpcionCorrecta { get; set; }
        }


    Se usarían así:

                XmlSerializer s = new XmlSerializer(typeof(PreguntasRaiz));
                PreguntasRaiz p;
                using (FileStream fs = new FileStream(@"C:\preguntas.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    p = s.Deserialize(fs) as PreguntasRaiz;
                }
                //Ahora p.Preguntas tiene las preguntas;

    Ah, eso sí:  No estoy de acuerdo con el XML en lo absoluto.  No deberían haber elementos de opcion enumerados, y no debería haber un elemento de opción correcta.  Lo mejor sería un XML así:

    <?xml version="1.0" standalone="yes"?>
    <dataroot xmlns:od="urn:schemas-microsoft-com:officedata">
        <Pregunta>
            <Titulo>...</Titulo>
            <Opcion>...</Opcion>
            <Opcion Correcta="true">...</Opcion>
            <Opcion>...</Opcion>
            <Opcion>...</Opcion>
        <Pregunta>
        <Pregunta>
            <Titulo>...</Titulo>
            <Opcion>...</Opcion>
            <Opcion>...</Opcion>
            <Opcion Correcta="true">...</Opcion>
            <Opcion>...</Opcion>
        <Pregunta>
        <Pregunta>
            <Titulo>...</Titulo>
            <Opcion Correcta="true">...</Opcion>
            <Opcion>...</Opcion>
            <Opcion>...</Opcion>
            <Opcion>...</Opcion>
        <Pregunta>
        ...
    </dataroot>

    Entonces tendríamos Objetos Opcion con 2 propiedades:  Texto y Correcta y podrían automáticamente agruparse en una colección.  Que cada opción tenga un nombre de elemento diferente complica todo.  Ah, y cambié "Hoja1" a "Pregunta" porque ni idea de por qué se llama así.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT


    jueves, 17 de mayo de 2018 7:06
    Moderador

Todas las respuestas

  • Deleted
    jueves, 17 de mayo de 2018 2:11
  • Mucho más fácil con clases y XmlSerializer.

        [XmlRoot("dataroot")]
        public class PreguntasRaiz
        {
            [XmlElement("Hoja1")]
            public List<Pregunta> Preguntas { get; set; }
        }
    
        public class Pregunta
        {
            [XmlElement("tituloPregunta")]
            public string Titulo { get; set; }
    
            [XmlElement("opcion1")]
            public string Opcion1 { get; set; }
    
            [XmlElement("opcion2")]
            public string Opcion2 { get; set; }
    
            [XmlElement("opcion3")]
            public string Opcion3 { get; set; }
    
            [XmlElement("opcion4")]
            public string Opcion4 { get; set; }
    
            [XmlElement("opcionCorrecta")]
            public string OpcionCorrecta { get; set; }
        }


    Se usarían así:

                XmlSerializer s = new XmlSerializer(typeof(PreguntasRaiz));
                PreguntasRaiz p;
                using (FileStream fs = new FileStream(@"C:\preguntas.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    p = s.Deserialize(fs) as PreguntasRaiz;
                }
                //Ahora p.Preguntas tiene las preguntas;

    Ah, eso sí:  No estoy de acuerdo con el XML en lo absoluto.  No deberían haber elementos de opcion enumerados, y no debería haber un elemento de opción correcta.  Lo mejor sería un XML así:

    <?xml version="1.0" standalone="yes"?>
    <dataroot xmlns:od="urn:schemas-microsoft-com:officedata">
        <Pregunta>
            <Titulo>...</Titulo>
            <Opcion>...</Opcion>
            <Opcion Correcta="true">...</Opcion>
            <Opcion>...</Opcion>
            <Opcion>...</Opcion>
        <Pregunta>
        <Pregunta>
            <Titulo>...</Titulo>
            <Opcion>...</Opcion>
            <Opcion>...</Opcion>
            <Opcion Correcta="true">...</Opcion>
            <Opcion>...</Opcion>
        <Pregunta>
        <Pregunta>
            <Titulo>...</Titulo>
            <Opcion Correcta="true">...</Opcion>
            <Opcion>...</Opcion>
            <Opcion>...</Opcion>
            <Opcion>...</Opcion>
        <Pregunta>
        ...
    </dataroot>

    Entonces tendríamos Objetos Opcion con 2 propiedades:  Texto y Correcta y podrían automáticamente agruparse en una colección.  Que cada opción tenga un nombre de elemento diferente complica todo.  Ah, y cambié "Hoja1" a "Pregunta" porque ni idea de por qué se llama así.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT


    jueves, 17 de mayo de 2018 7:06
    Moderador