Muchas gracias lo probare. El 4 de abril de 2010 22:38, Luis Miguel Morillas <[email protected]>escribió:
> El día 4 de abril de 2010 10:26, monoBOT <[email protected]> > escribió: > > la línea 83 está en la función de grabado: > > def grabar(self, event): > > dialogo=wx.MessageDialog(None, '¿Desea Grabar y Salir?', > 'Atención', > > wx.YES_NO|wx.ICON_QUESTION|wx.STAY_ON_TOP) > > respuesta=dialogo.ShowModal() > > if (respuesta ==wx.ID_YES): > > print 'obteniendo valores...' > > nombres_attr = ['numerocolegiado','nombre', 'primerapellido', > > 'segundoapellido', 'dni', 'direccion', 'codigopostal', 'poblacion', > 'email', > > 'telefono1', 'telefono2'] > > datos_entrados = [self.ventana.entranumcol, > > self.ventana.entranombre, self.ventana.entraapellido1, > > self.ventana.entraapellido2, self.ventana.entradni, > self.ventana.entradirec, > > self.ventana.entrapost, self.ventana.entrapobl, self.ventana.entraemail, > > self.ventana.entratf1, self.ventana.entratf2] > > print 'guardando...' > > for m in range(len(datos_entrados)): > > cambia_attrib(arbol='usuario', dato=nombres_attr[m], > > nuevovalor=reg_xml(datos_entrados[m].GetValue())) > > nom_empr = ['nombreempresa', 'cifempresa', > > 'direccionempresa','codigopostalempresa', 'telefonoempresa'] > > dat_empr = [self.ventana.entranombreempresa, > > self.ventana.entracifempresa, self.ventana.entradireccionempresa, > > self.ventana.entracodigopostalempresa, self.ventana.entratelefonoempresa] > > for m in range(len(nom_empr)): > > cambia_attrib(arbol='datosempresa', dato=nom_empr[m], > > nuevovalor=reg_xml(dat_empr[m].GetValue())) > > cambia_attrib('usuario', 'colegio', > > reg_xml(self.ventana.entracolegio.GetStringSelection())) > > cambia_attrib('usuario', 'provincia', > > reg_xml(self.ventana.entraprov.GetStringSelection())) > > guarda_datos(datogral) > > print 'guardado' > > self.Destroy() > > else: > > print 'Cancelado' > > dialogo.Destroy() > > la función de grabado lo que hace es llamar a unas > > variables self.ventana.entranombreempresa todas ellas se montan de > esta > > forma: > > self.ventana.entranombre = wx.TextCtrl(self.ventana, -1, > nombre_en_fichero) > > y el valor por defecto de cada una proviene del fichero xml también: > > nombre_en_fichero = xml_none(busqueda_xml ('usuario', 'nombre')) > > así que lo que hago es: > > lee xml ---> muestra en pantalla el dato guardado ---> el usuario cambia > los > > datos ---> grabo los datos. > > las funciones de lectura y guardado de xml son: > > def busqueda_xml (arbol, dato): > > valor = > > > arbol_gral.getElementsByTagName(arbol)[0].getElementsByTagName(dato)[0].childNodes[0].nodeValue > > return valor > > def guarda_datos(archivo): > > fichero = open(os.path.realpath(archivo), "w") > > arbol_gral.writexml(fichero, encoding='iso-8859-1') > > fichero.close() > > return True > > El error lo genera writexml en esta función. Yo no utilizo minidom, > pero supongo que esto te funcionará: > > import codecs # esto ponlo al principio del fichero > > def guarda_datos(archivo): > fichero = codecs.open(os.path.realpath(archivo), "w", 'iso-8859-1') > arbol_gral.writexml(fichero, encoding='iso-8859-1') > fichero.close() > return True > > Si quieres utilizar tu código en un sistema en producción, habría que > revisar algunas cosas. Yo te recomiendo utilizar otros módulos en > lugar de minidom. Echa un vistazo a Amara > (http://wiki.xml3k.org/Amara2), te permite manejar xml como si fueran > objetos python. > > --lm > > > la funcion xml_none lo que hace es cambiar una entrada igual a cero por > un > > campo limpio > > def xml_none(m): > > if m =='0': > > n = '' > > return n > > return m > > la función contraria la pongo al grabar y lo que hace es convertir un > campo > > vacío en un 0, y también los caracteres prohibidos por xml por sus > sutitutos > > ... así evito el error al grabar. > > > > def reg_xml(m): > > if m == '': > > n = '0' > > return n > > n = m.replace('&', '&') > > n = n.replace('<','<') > > n = n.replace('>','>') > > return n > > > > -- > > monobotblog.alvarezalonso.es > > _______________________________________________ > > Python-es mailing list > > [email protected] > > http://mail.python.org/mailman/listinfo/python-es > > FAQ: http://python-es-faq.wikidot.com/ > > > > > _______________________________________________ > Python-es mailing list > [email protected] > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > -- Héctor Alvarez Arquitecto Advertencia legal: De acuerdo a la vigente Ley Orgánica 15/1999 de Protección de Datos de carácter Personal le informamos que: Este correo electrónico contiene información privada y estrictamente confidencial. Si usted NO ES el destinatario, NO ESTA AUTORIZADO a leerlo, directa o indirectamente, usar, revelar, distribuir, imprimir o copiar ninguna de las partes y/o anexos de éste mensaje. Si por error ha recibido este mensaje, le rogamos lo notifique a su emisor respondiendo a éste e-mail y proceda a borrar de su sistema inmediatamente el mensaje así como todas sus copias.
_______________________________________________ Python-es mailing list [email protected] http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
