´Funciona como un guante!!! ... muchas gracias luis miguel El 4 de abril de 2010 23:04, monoBOT <monobot.s...@gmail.com> escribió:
> Muchas gracias lo probare. > > El 4 de abril de 2010 22:38, Luis Miguel Morillas > <moril...@gmail.com>escribió: > > El día 4 de abril de 2010 10:26, monoBOT <monobot.s...@gmail.com> >> 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 >> > Python-es@python.org >> > http://mail.python.org/mailman/listinfo/python-es >> > FAQ: http://python-es-faq.wikidot.com/ >> > >> > >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> 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. > -- 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 Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/