Ir al contenido principal

Parseo XML Parte 1

 Se trabajó en actualizar el parseo de los xml. se puso especial importancia en el parseo de las operaciones, debido a que  el formato de estas y la forma en la que funcionan era lo mas complejo de todo.

Al principio se intento cargarlo de forma similar a como se hacia con los catalogos, pero esto no funcoinó de la forma espedaba y no cargaba bien los datos, luego de varias horas de intentos se logró tener algo que se pensaba que fincionaba, la forma en la que se hizo fue una tabla de la forma


fecha - nuevo empleado - asocia empleado - desasocia empleado - tipo de jornada - marca de asistencia

donde todos estas columnas, excepto fecha, eran de tipo xml y ahí se insertaban los nodos de cada tipo para luego ser leidos, el problema de esto es ue por alguna razon solo se cargaba el priemr nodo de cada tipo, por lo que se perdian todos los datos.


la siguiente solucion, que feu la que terminó funcionando, fue crear una nueva columna, que contenia todo el nodo xml de esta fecha, luego de esto, iteramos por la tabla, y movemos cada subnodo a la columna correspondiente. y finalmente iteramos de nuevo para realizar las operaciones


el codigo de mover los nodos se ve de esta forma para las instrucciones de nuevo empleado:



DECLARE @main xml = '<root></root>' 
--plantilla para cuando insertemos las operaciones a las comunas


 --iteramos por la tabla
WHILE @CursorTestID <= @RowCnt
BEGIN
    -- en los update lo que hacemos es tomar los nodos con el nombre necesario de cada dia
    -- y moverlos a la columna necesaria
    --insertamos las operaciones de insertar empleados
    UPDATE @TablaOperaciones 
        SET NuevoEmpleado = (
                 SELECT @main.query('/root/*'), XmlData.query('/Operacion/NuevoEmpleado'
                 FOR XML RAW(''),ROOT('root'), ELEMENTSTYPE
                 )
        WHERE ID = @CursorTestID and NuevoEmpleado IS NOT NULL


Con esto obtenemos columnas de la siguiente forma (el ejemplo es para la primera fecha)

<root>
  <NuevoEmpleado FechaNacimiento="1976-04-11" Nombre="Mario Saez Garrido" Password="5243" Username="MSaez" IdDepartamento="1" ValorDocumentoIdentidad="22047868" idPuesto="10" idTipoDocumentacionIdentidad="2" />
  <NuevoEmpleado FechaNacimiento="2000-04-20" Nombre="Alana Marquez Vargas" Password="7122" Username="AMarquez" IdDepartamento="2" ValorDocumentoIdentidad="41435973" idPuesto="6" idTipoDocumentacionIdentidad="1" />
  <NuevoEmpleado FechaNacimiento="1961-12-19" Nombre="Pedro Perez Moya" Password="5564" Username="PPerez" IdDepartamento="3" ValorDocumentoIdentidad="39069386" idPuesto="1" idTipoDocumentacionIdentidad="1" />
  <NuevoEmpleado FechaNacimiento="1965-11-07" Nombre="Carlos Alberto Moya Gomez" Password="1662" Username="CMoya" IdDepartamento="4" ValorDocumentoIdentidad="73248587" idPuesto="9" idTipoDocumentacionIdentidad="1" />
  <NuevoEmpleado FechaNacimiento="1995-09-02" Nombre="Miguel Angel Romero Fuentes" Password="7999" Username="MRomero" IdDepartamento="1" ValorDocumentoIdentidad="23833627" idPuesto="1" idTipoDocumentacionIdentidad="2" />
  <NuevoEmpleado FechaNacimiento="1965-05-16" Nombre="Joaquin Molina Cano" Password="8885" Username="JMolina" IdDepartamento="2" ValorDocumentoIdentidad="59687950" idPuesto="10" idTipoDocumentacionIdentidad="1" />
  <NuevoEmpleado FechaNacimiento="1983-03-23" Nombre="Gabriela Saez Lozano" Password="7489" Username="GSaez" IdDepartamento="3" ValorDocumentoIdentidad="84844600" idPuesto="5" idTipoDocumentacionIdentidad="1" />
  <NuevoEmpleado FechaNacimiento="1964-03-04" Nombre="Isaac Pascual Fuentes" Password="5981" Username="IPascual" IdDepartamento="4" ValorDocumentoIdentidad="58053945" idPuesto="8" idTipoDocumentacionIdentidad="1" />
  <NuevoEmpleado FechaNacimiento="1982-08-06" Nombre="Tania Molina Moreno" Password="8393" Username="TMolina" IdDepartamento="1" ValorDocumentoIdentidad="10224175" idPuesto="6" idTipoDocumentacionIdentidad="2" />
  <NuevoEmpleado FechaNacimiento="1974-03-24" Nombre="Karla Patricia Marin Crespo" Password="1784" Username="KMarin" IdDepartamento="2" ValorDocumentoIdentidad="70460298" idPuesto="10" idTipoDocumentacionIdentidad="1" />
</root>


Que ya visto en la BD se ve así:




Si bien de momento no hacemos naa con los datos, ya ahora es basicamente hacer lo mismo que haciamos con los catalogos, solo hay que iterar la tabla final e ir ejecutando instrucciones columna por columna


Comentarios

Entradas populares de este blog

TAREA 3

Cantidad de horas trabajadas: Oswaldo: 26 Jenaro: 26 Debido a la elaboración de la tercera tarea programada podemos concluir que: Se tiene un mejor conocimiento y una mejor practica en la elaboración de una base de datos Aprendimos sobre leer archivos XML en SQL Server y como añadir los datos del XML a las tablas respectivas de la base de datos, sobre como modificar estos archivos, y como "jugar" con estos Se instruyo  la elaboración de una pagina web utilizando HTML y Python, usando la librería de Flask y el framework de Bootstrap y conectar la pagina web con la base de datos para poder añadir, editar, buscar y eliminar datos en la página web y que estos procesos se reflejen en la base de datos Se tiene un mejor conocimiento en la creación de vistas, manejo de errores y uso de transacciones Análisis de resultados: En general nos sentimos bastante orgullosos del trabajo realizado, tanto en la pagina como en la base de datos implementamos todas las funcionalidades, el programa...

Casi Finalización de la Pagina Web y Placeholders para Conexión con la BD

Esta ultima semana fue dedicada a la casi completa finalización de la pagina web del sistema de administración, todas las partes que faltaban de implementar están listas, además se realizo una conexión con la parte de datos de forma provisional, a continuación se hace un resumen de lo realizado: La opción de listar empleados  fue mejorada con iconos para editar y eliminar, aunque de momento debido al no tener una BD real estos no hacen nada. Edición de empleado y puesto fue mejorada drásticamente, con sus datos tomados de un catalogo y siendo mostrados en forma de drop menu, además la inserción de la fecha de nacimiento se hace mediante un calendario, por lo que de esta forma es imposible que se inserten datos no validos o en el formato incorrecto. Respecto a lo que mencioné anteriormente de los iconos de editar y borrar, hay una implementación básica realizada: En la lista de puestos si se seleccionan estos iconos, nos en...

Últimos 2 días de trabajo

Los últimos 2 días de trabajo, correspondientes al jueves 15 y viernes 16, fueron los días mas productivos que hemos tenido. La pagina web fue finalizada su totalidad, esto correspone a cambios esteticos minimos y la creacion de un menú de ajustes, se creó la BD con sus respectivas tablas, y se hicieron los stored procedures para conectar todo, además se finalizó el parseo de los archivos xml. Respecto a la creación de los procedures para hacer los CRUD, no hubo muchas complicaciones, como ya antes habíamos hecho pruebas con una Bd de prueba, crear las versiones finales de los procedures se redujo a simplemente crearlos siguiendo la plantilla dada por el profesor, e ir modificándolos según cada tabla. se puede ver nuestro repositorio de GitHub para notar que prácticamente ya son creadas en sus versiones finales, y son modificadas solo para hacer correcciones menores. La lectura de los xml si tuvo varios problemas, si bien la version creada pot el compañero era perfectamente funcional, ...