miércoles, 6 de junio de 2012

CRUD en Python con Archivos XML

Hola que tal, ya que me encuentro comenzando en el mundo de python aqui les envio un CRUD realizado por mi en PYTHON con archivos XML, espero le sirva a alguien asi como me sirvio a mi para aprender un poco, nos vemos!!!
(Cuidado con la Identación)

Codigo Python:

# -*- coding: utf-8 -*-
from xml.dom import minidom
arbol_dom = minidom.parse("/ruta/para/llegar/al/archivo.xml")

class Cliente():
   
    def __init__(self):
        print "Ejercicio CRUD en Pyton"+"\n"
        print "-----------------------"+"\n"   
        print "1- Listar"+"\n"
        print "2- Crear"+"\n"
        print "3- Modificar"+"\n"
        print "4- Eliminar"+"\n"
        print "5- Buscar"+"\n"
        print "6- Salir"+"\n"
        opcion = raw_input("Seleccione la opción deseada: ")
        self.Opciones(opcion)

    def Opciones(self, op):
        op=int(op)

        if op == 1:
            self.Listar()
            self.__init__()
        elif op == 2:
            print "Ingrese los datos a anexar a la base de datos"
            idcliente= raw_input("Ingrese un Id Cliente(Tenga en cuenta el ultimo existente) ")
            nombre= raw_input("Ingrese el Nombre ")
            ape= raw_input("Ingrese el Primer Apellido ")
            ape2= raw_input("Ingrese el Segundo Apellido ")
            obs= raw_input("Ingrese la Observacion en caso de existir ")           
            datos = [idcliente, nombre,ape, ape2, obs]
            self.Crear(datos)
            self.Listar()
            self.__init__()
        elif op == 3:
            id_mod= raw_input("Ingrese el Id del Cliente a Modificar ")
            nombre= raw_input("Ingrese el Nombre ")
            ape= raw_input("Ingrese el Primer Apellido ")
            ape2= raw_input("Ingrese el Segundo Apellido ")
            obs= raw_input("Ingrese la Observacion en caso de existir ")
            datos = [id_mod, nombre,ape, ape2, obs]
            self.Modificar(id_mod, datos)
            self.Listar()
            self.__init__()               
        elif op == 4:
            id_bo= raw_input("Ingrese el Id del Cliente a Eliminar ")
            self.Borrar(id_bo)
            self.Listar()
            self.__init__()
        elif op == 5:
            id_bu= raw_input("Ingrese el Id del Cliente a Buscar ")
            self.MostrarBusqueda(id_bu)
            self.__init__()       
        elif op == 6:
            print "Gracias por Usar el Sistema de Registro"+"\n"
            print "Licencia GNU - Recuerda Citar la fuente"+"\n"   
            print "Jonathan Ruiz 2012"   
        else:
            print "Ingrese una opcion correcta"+"\n"
            self.__init__()
           
                       
    def MostrarBusqueda(self, id_bu):
        print "Datos Obtenidos:"+"\n"
        nodoROW = self.Buscar(id_bu)
        fields= nodoROW.getElementsByTagName('field')
        for field in fields:
            print field.childNodes[0].data
        print "\n"    
           
               
   
    def Guardar(self):
        fichero = open("/home/asl/Desktop/CRUD/data_cliente.xml", "w")
        arbol_dom.writexml(fichero)
        fichero.close()           
       
   
    def Crear(self, datos):
        row = arbol_dom.createElement("row")
        nodoTABLE = arbol_dom.getElementsByTagName('table_data')
       
        #print nodoROW       
        nodoTABLE[0].appendChild(row)
       
        #creo las filas
        field = arbol_dom.createElement("field")
        field.setAttribute("name", "idcliente")
        row.appendChild(field)
        texto = arbol_dom.createTextNode(datos[0])
        field.appendChild(texto)

        field = arbol_dom.createElement("field")
        field.setAttribute("name", "nombre")
        row.appendChild(field)
        texto = arbol_dom.createTextNode(datos[1])
        field.appendChild(texto)

        field = arbol_dom.createElement("field")
        field.setAttribute("name", "apellido1")
        row.appendChild(field)
        texto = arbol_dom.createTextNode(datos[2])
        field.appendChild(texto)
   
        field = arbol_dom.createElement("field")
        field.setAttribute("name", "apellido2")
        row.appendChild(field)
        texto = arbol_dom.createTextNode(datos[3])
        field.appendChild(texto)

        field = arbol_dom.createElement("field")
        field.setAttribute("name", "observaciones")
        row.appendChild(field)
        texto = arbol_dom.createTextNode(datos[4])
        field.appendChild(texto)

       
        #Abro,escribo y cierro el archivo       
        self.Guardar()

        def Buscar(self,idcliente):

        rowB = None
        nodoROW = arbol_dom.getElementsByTagName('row')
               
        for a in nodoROW:
            field= a.getElementsByTagName('field')[0]
            value = int(field.firstChild.data)
            idcliente = int(idcliente)                       
           
            if value == idcliente:
                rowB = a
                                break
        return rowB

       
    def Listar(self):
        nodoROW = arbol_dom.getElementsByTagName('row')
        for a in nodoROW:
            fields= a.getElementsByTagName('field')
            for field in fields:
                value=field.childNodes[0].data
                print value
            print "\n"
           
   
   

    def Borrar(self, idcliente):
                rowB = self.Buscar(idcliente)
                rowB.parentNode.removeChild(rowB)
                self.Guardar()
                print "El Archivo ha sido Borrado"

   
    def Modificar(self, idcliente, datos):
        row_cliente = self.Buscar(idcliente)
        fields=row_cliente.getElementsByTagName('field')
        for field in fields:
            row_cliente.removeChild(field)
           

        #creo las filas
        field = arbol_dom.createElement("field")
        field.setAttribute("name", "idcliente")
        row_cliente.appendChild(field)
        texto = arbol_dom.createTextNode(datos[0])
        field.appendChild(texto)

        field = arbol_dom.createElement("field")
        field.setAttribute("name", "nombre")
        row_cliente.appendChild(field)
        texto = arbol_dom.createTextNode(datos[1])
        field.appendChild(texto)

        field = arbol_dom.createElement("field")
        field.setAttribute("name", "apellido1")
        row_cliente.appendChild(field)
        texto = arbol_dom.createTextNode(datos[2])
        field.appendChild(texto)
   
        field = arbol_dom.createElement("field")
        field.setAttribute("name", "apellido2")
        row_cliente.appendChild(field)
        texto = arbol_dom.createTextNode(datos[3])
        field.appendChild(texto)

        field = arbol_dom.createElement("field")
        field.setAttribute("name", "observaciones")
        row_cliente.appendChild(field)
        texto = arbol_dom.createTextNode(datos[4])
        field.appendChild(texto)

        self.Guardar()


#Cuerpo del Sistema
Cliente()








Codigo XML

<?xml version="1.0" ?><mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<database name="curso_mysql">
    <table_data name="cliente">
    <row>
        <field name="idcliente">1</field>
        <field name="nombre">Daniel</field>
        <field name="apellido1">Fernandez</field>
        <field name="apellido2">R</field>
        <field name="observaciones">980Bs</field>
    </row>
    <row>
        <field name="idcliente">2</field>
        <field name="nombre">Joger</field>
        <field name="apellido1">Quintero</field>
        <field name="apellido2">E</field>
        <field name="observaciones">450Bs</field>
    </row>
    <row>
        <field name="idcliente">3</field>
        <field name="nombre">Maria</field>
        <field name="apellido1">Perez</field>
        <field name="apellido2">Lobo</field>
        <field name="observaciones">Ninguna</field>
    </row>
    <row>
        <field name="idcliente">4</field>
        <field name="nombre">Luis</field>
        <field name="apellido1">Lobo</field>
        <field name="apellido2">Sanchez</field>
        <field name="observaciones">Alto</field>
    </row>
    </table_data>
</database>
</mysqldump>






       

  

0 comentarios:

Publicar un comentario

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Affiliate Network Reviews