none
Agregar NUEVA fila en archivo XML RRS feed

  • Pregunta

  • Buenas!

    Necesito ayuda con un proyecto de archivos XML, ya que en este momento ya crea el archivo pero al compilar nuevamente e intentar agregar una nueva fila al archivo lo que hace es "caer encima" del archivo, es decir crea un archivo nuevo cada vez que agrego una fila. ¿Cómo puedo lograr agregar una fila en un archivo XML ya existente?

    Tomado en cuenta que para el proyecto me piden trabajar en capas y que estoy trabajando con DataSet, DataColumn y DataRow

    De antemano agradezco la ayuda.


    • Editado ni16_90 jueves, 16 de noviembre de 2017 6:07
    • Cambiado Enrique M. Montejo sábado, 18 de noviembre de 2017 16:33 Pregunta relacionada con objetos de acceso a datos.
    jueves, 16 de noviembre de 2017 6:02

Respuestas

  • Si lo que quieres es que se guarde con otro nombre debes modificar  SalvaEstructura_XML()  y en estructuraBD.WriteXml(archivoXML, XmlWriteMode.WriteSchema) utilizar otro nombre de archivo en lugar de archivoXML.

    Estás usando el mismo nombre de archivo tanto para leerlo como para grabarlo.


    Saludos, Javier J

    • Propuesto como respuesta Pablo Rubio viernes, 17 de noviembre de 2017 15:53
    • Marcado como respuesta Enrique M. Montejo sábado, 18 de noviembre de 2017 16:32
    viernes, 17 de noviembre de 2017 8:57

Todas las respuestas

  • Para añadir el elemento al XML tienes que cargarlo, añadir el elemento y volver a grabarlo. Si en cada actualización te crea un archivo diferente es porque al hacer el Save el parámetro que le pasas como nombre de archivo no es el mismo que el que usaste al hacer el Load.
    Pon el código que usas para ver donde está el problema.

    Saludos, Javier J

    • Propuesto como respuesta Juan Mondragón jueves, 16 de noviembre de 2017 23:18
    jueves, 16 de noviembre de 2017 7:56
  • ¿Cómo o donde se debe cargar?

    Es que lo que pasa es que me crea un nuevo archivo pero con el mismo nombre que el anterior, como dije antes la actualización le "cae encima"  al archivo anterior.

    Public Class Clase_xml
            Dim estructuraBD As New DataSet
        Dim archivoXML As String = "Empleado.xml"
    
            Public Property Nombre_ArchivoXML As String
                Get
                    Return archivoXML
                End Get
                Set(value As String)
                    archivoXML = value
                End Set
            End Property
    
            Sub AgregaTabla_aEstructura(tabla As DataTable)
                'agrega una nueva tabla a la estructura. Se espera que la tabla venga con datos
                estructuraBD.Tables.Add(tabla)
            End Sub
    
            'dalva la estructura actual a un archivo xml
            Sub SalvaEstructura_XML()
                Try
                    'se aceptan todos los cambios pendientes, si hubieran.
                    estructuraBD.AcceptChanges()
                    'se crea el archivo XML con el contenido de la estructura actual
                    estructuraBD.WriteXml(archivoXML, XmlWriteMode.WriteSchema)
                Catch ex As Exception
                    Throw New System.Exception(ex.Message)
                End Try
        End Sub
    
    
    
    End Class

    Public Class Clase_negocios
        Dim nombre As String
        Dim papellido As String
        Dim sapellido As String
        Dim cedula As String
        Dim nacionalidad As String
        Dim sexo As String
        ' Dim est_civil As String
        Dim tipo_empleado As String
        Dim estado As String
        Dim f_naci As Date
        Dim f_ing As Date
        Dim sal_base As Integer
        'Dim can_hijos As Integer
    
            'objeto para la comunicacion con la clase de datos
        Dim Datos As New Clase_datos
    
        Public Property nom As String
            Get
                Return nombre
            End Get
            Set(value As String)
                nombre = value
            End Set
        End Property
    
        Public Property p_apellido As String
            Get
                Return papellido
            End Get
            Set(value As String)
                papellido = value
            End Set
        End Property
    
        Public Property s_apellido As String
            Get
                Return sapellido
            End Get
            Set(value As String)
                sapellido = value
            End Set
        End Property
    
        Public Property ced As String
            Get
                Return cedula
            End Get
            Set(value As String)
                cedula = value
            End Set
        End Property
    
        'Public Property estado_ci As String
        '    Get
        '        Return est_civil
        '    End Get
        '    Set(value As String)
        '        est_civil = value
        '    End Set
        'End Property
    
        Public Property sexo_e As String
            Get
                Return sexo
            End Get
            Set(value As String)
                sexo = value
            End Set
        End Property
    
        Public Property est As String
            Get
                Return estado
            End Get
            Set(value As String)
                estado = value
            End Set
        End Property
    
        Public Property t_empleado As String
            Get
                Return tipo_empleado
            End Get
            Set(value As String)
                tipo_empleado = value
            End Set
        End Property
    
        Public Property nacio As String
            Get
                Return nacionalidad
            End Get
            Set(value As String)
                nacionalidad = value
            End Set
        End Property
    
        Public Property fe_naci As Date
            Get
                Return f_naci
            End Get
            Set(value As Date)
                f_naci = value
            End Set
        End Property
    
        Public Property fe_ing As Date
            Get
                Return f_ing
            End Get
            Set(value As Date)
                f_ing = value
            End Set
        End Property
    
        Public Property s_base As Integer
            Get
                Return sal_base
            End Get
            Set(value As Integer)
                sal_base = value
            End Set
        End Property
    
        'Public Property c_hijos As Integer
        '    Get
        '        Return can_hijos
        '    End Get
        '    Set(value As Integer)
        '        can_hijos = value
        '    End Set
        'End Property
    
        Sub ValidarCliente()
            If (nombre.Length = 0 Or cedula.Length = 0 Or p_apellido.Length = 0 Or s_apellido.Length = 0 Or nacio.Length = 0 Or sexo_e.Length = 0  Or est.Length = 0 Or t_empleado.Length = 0) Then
                Throw New System.Exception("Error campo inválido")
            End If
        End Sub
    
        'metodo para inicializar la estructura de datos
        Sub creaEstructuraDatos()
            Datos.CreaColumna_Empleado()
        End Sub
    
        'metodo para trasladar la informaciona a la estructura de datos
        Sub AgregaEmpleadoNuevo()
            Datos.AgregaEmpleado(nom, p_apellido, s_apellido, ced, nacio, sexo_e, s_base, t_empleado, est, fe_naci, fe_ing)
        End Sub
    
        'finaliza el proceso y escribe la tabla xml
        Sub GrabaArchivo()
            Datos.AgregaTabla_y_GrabaArchivo()
        End Sub
    
        Sub guarda()
            Datos.salvarEstructura()
        End Sub
    
    End Class

    Imports System.Data
    Public Class Clase_datos
        'atributo interno, tipo tabla, llamada cliente 
        Dim TablaEmpleado As DataTable = New DataTable("Empleado")
        'objeto que maneja la estructura de tablas y graba en XML
        Dim EstructuraXML As New Clase_xml
    
        Public Property TEmpleado As DataTable
            Set(value As DataTable)
            End Set
            Get
                Return TablaEmpleado
            End Get
        End Property
    
    
        Sub CreaColumna_Empleado()
            Dim columna As DataColumn = New DataColumn
            columna = New DataColumn
            columna.ColumnName = "Cedula"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Cedula"
            TablaEmpleado.Columns.Add(columna)
    
    
            columna = New DataColumn 'hay que escribir new datacolumn cada vez que creamos una nueva columna para que no 
            columna.ColumnName = "Nombre"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Nombre"
            TablaEmpleado.Columns.Add(columna)
    
            columna = New DataColumn
            columna.ColumnName = "Primer apellido"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Primer apellido"
            TablaEmpleado.Columns.Add(columna)
    
            columna = New DataColumn
            columna.ColumnName = "Segundo apellido"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Segundo apellido"
            TablaEmpleado.Columns.Add(columna)
    
            columna = New DataColumn
            columna.ColumnName = "Nacionalidad"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Nacionalidad"
            TablaEmpleado.Columns.Add(columna)
    
            columna = New DataColumn
            columna.ColumnName = "Sexo"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Sexo"
            TablaEmpleado.Columns.Add(columna)
    
            columna = New DataColumn
            columna.ColumnName = "Salario base"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Salario base"
            TablaEmpleado.Columns.Add(columna)
    
            columna = New DataColumn
            columna.ColumnName = "Tipo de empleado"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Tipo de empleado"
            TablaEmpleado.Columns.Add(columna)
    
            columna = New DataColumn
            columna.ColumnName = "Estado"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Estado"
            TablaEmpleado.Columns.Add(columna)
    
            columna = New DataColumn
            columna.ColumnName = "Fecha de nacimiento"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Fecha de nacimiento"
            TablaEmpleado.Columns.Add(columna)
    
            columna = New DataColumn
            columna.ColumnName = "Fecha de ingreso"
            columna.DataType = System.Type.GetType("System.String")
            columna.AllowDBNull = False
            columna.Caption = "Fecha de ingreso"
            TablaEmpleado.Columns.Add(columna)
        End Sub
    
    
    
    
    
        'agrega una fila a la tabla clientes 
        Sub AgregaEmpleado(nom As String, priapellido As String, seapellido As String, cedu As String, nacio As String, sex As String, s_bas As Integer, t_empl As String, est_empl As String, f_nac As String, f_ing As String)
            Dim fila As DataRow
            fila = TablaEmpleado.NewRow()
            fila("Cedula") = cedu
            fila("Nombre") = nom
            fila("Primer apellido") = priapellido
            fila("Segundo apellido") = seapellido
            fila("Nacionalidad") = nacio
            fila("Sexo") = sex
            fila("Salario base") = s_bas
            fila("Tipo de empleado") = t_empl
            fila("Estado") = est_empl
            fila("Fecha de nacimiento") = f_nac
            fila("Fecha de ingreso") = f_ing
            TablaEmpleado.Rows.Add(fila) 'agrega la fila a la tabla clientes
            TablaEmpleado.AcceptChanges() 'acepta los cambios
    
    
    
        End Sub
    
        'agrega una tabla a la estructura dataset
        Sub AgregaTabla_y_GrabaArchivo()
            'recibe el objeto interno definido que es tiplo tabla, con sus valores y filas
            EstructuraXML.AgregaTabla_aEstructura(TablaEmpleado)
            'genera la estructura de archivo xml a disco
            EstructuraXML.SAlvaEstructura_XML()
        End Sub
        Sub salvarEstructura()
            EstructuraXML.SalvaEstructura_XML()
        End Sub
    End Class


    Nicole CC

    viernes, 17 de noviembre de 2017 4:04
  • Si lo que quieres es que se guarde con otro nombre debes modificar  SalvaEstructura_XML()  y en estructuraBD.WriteXml(archivoXML, XmlWriteMode.WriteSchema) utilizar otro nombre de archivo en lugar de archivoXML.

    Estás usando el mismo nombre de archivo tanto para leerlo como para grabarlo.


    Saludos, Javier J

    • Propuesto como respuesta Pablo Rubio viernes, 17 de noviembre de 2017 15:53
    • Marcado como respuesta Enrique M. Montejo sábado, 18 de noviembre de 2017 16:32
    viernes, 17 de noviembre de 2017 8:57