none
Crear dataset a partir de xml, crea dos filas en tabla para un nodo raíz que tiene un nodo hijo con el mismo nombre. RRS feed

  • Pregunta

  • Hola tengo un xml que estoy pasando a un dataset, ocurre que cuando en ese xml un modo raíz tiene un nodo hijo con el mismo nombre para la tabla que se crea en el dataset a partir del nodo raíz de crea dos filas.

    Ejemplo:

    <Mixml>
    
    <Cliente>
    
    <Nombre> Nombre </Nombre>
    
    <Edad>Edad</Edad>
    
    </Cliente>
    
    <Compañía>
    
    <!----Cuando se crea el dataset en la tabla Compañía se crean dos filas cuando debería existir solo una, es como si en nodo hijo Compañía lo tomara como una tabla más.---->
    
    <Compañía>Nombre</Compañía>
    
    <Dirección></Dirección>
    
    </Compañía>
    
    </Mixml>
    
    
    
    
    
    

    Agradezco su ayuda para solucionar esto.

    Gracias.


    • Editado Pixelmal6 sábado, 11 de abril de 2020 2:50 Letra mal escrita
    sábado, 11 de abril de 2020 2:48

Respuestas

  • Ah, no, eso no va a funcionar. El método ReadXml de un DataSet solo está pensado para volver a leer un XML que previamente se grabó con el método WriteXml desde un DataSet. Pero no puedes entregarle al ReadXml un XML arbitrario, no proveniente de un DataSet, y esperar que lo lea correctamente. En algunos casos directamente da un error y no lee nada, y en otros casos parece que lo lee, pero al convertir en formato tabular para el DataSet un XML que no es tabular sino jerárquico, produce toda clase de comportamientos extraños como por ejemplo el que estás viendo de duplicación de nodos.

    Así que me temo que vas a tener que cambiar de método. Tendrás que leer tu fichero XML con alguna de las varias clases que sirven para leer Xml, como por ejemplo XmlDocument, o XElement, o XmlTextReader... Pero no puedes usar el ReadXml de la clase DataSet si tu fichero XML no proviene de salvarlo desde un DataSet (o tiene una estructura compatible con los que se generan cuando haces WriteXml desde un DataSet).

    • Marcado como respuesta Pixelmal6 domingo, 21 de junio de 2020 7:28
    sábado, 11 de abril de 2020 16:15
    Moderador

Todas las respuestas

  • Depende de cómo estés "parseando" el XML. Si lo estás haciendo mediante un XmlDocument con XPATH, asegúrate de que no usas el comodín "//", es decir, pon en el XPath "/Mixml/Compañía" o "/Mixml/Compañía/Compañía" según cuál de los dos nodos estés buscando. Si usas la abreviatura "//Compañía" entonces te encuentra los dos nodos y por eso te los duplica.

    Si estás usando otro procedimiento distinto para analizar el Xml, entonces vas a tener que dar muchos más detalles sobre cómo lo estás haciendo para que pueda darte una respuesta algún visitante del foro que tenga experiencia con el particular mecanismo que estés usando.

    sábado, 11 de abril de 2020 6:54
    Moderador
  • Hola, paso el xml a dataset asi.

    string filePath = "D:\\Self\\Information.xml";
    DataSet ds = new DataSet();
    ds.ReadXml(filePath);

    El xml no siempre trae los mismo nodos, Aceves puede traer más o menos etc.

    Gracias.

    sábado, 11 de abril de 2020 15:23
  • Ah, no, eso no va a funcionar. El método ReadXml de un DataSet solo está pensado para volver a leer un XML que previamente se grabó con el método WriteXml desde un DataSet. Pero no puedes entregarle al ReadXml un XML arbitrario, no proveniente de un DataSet, y esperar que lo lea correctamente. En algunos casos directamente da un error y no lee nada, y en otros casos parece que lo lee, pero al convertir en formato tabular para el DataSet un XML que no es tabular sino jerárquico, produce toda clase de comportamientos extraños como por ejemplo el que estás viendo de duplicación de nodos.

    Así que me temo que vas a tener que cambiar de método. Tendrás que leer tu fichero XML con alguna de las varias clases que sirven para leer Xml, como por ejemplo XmlDocument, o XElement, o XmlTextReader... Pero no puedes usar el ReadXml de la clase DataSet si tu fichero XML no proviene de salvarlo desde un DataSet (o tiene una estructura compatible con los que se generan cuando haces WriteXml desde un DataSet).

    • Marcado como respuesta Pixelmal6 domingo, 21 de junio de 2020 7:28
    sábado, 11 de abril de 2020 16:15
    Moderador
  • Hola Pixelmal6

      

    Gracias por levantar tu consulta en los foros de MSDN. Cerraremos el Hilo, por ende si tiene alguna otra consulta por favor genera otra consulta para que la comunidad de foros te pueda asesorar.

     

    Siempre es un placer atender tus consultas!

     

    Gracias por usar los foros de MSDN.

     

    Oscar Navarro

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. 

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    lunes, 13 de abril de 2020 13:00
    Moderador