El mar, 24-08-2010 a las 12:05 -0500, Mauricio Baeza escribió:

> Hola a todos:
> 
> Estoy haciendo mis primeros programas en Python y tengo la siguiente
> duda. Si hago:
> 
> $ python3 actualizarxml.py
> 
> El archivo se actualiza bien. Pero si hago:
> 
> $ python actualizarxml.py
> 
> Me muestra el siguiente mensaje de error y el archivo XML lo deja
> trunco.
> 
> Traceback (most recent call last):
>   File "actualizarxml.py", line 13, in <module>
>     domDoc.writexml(xml_file)
>   File "/usr/lib/python2.6/site-packages/_xmlplus/dom/minidom.py",
> line 1746, in writexml
>     node.writexml(writer, indent, addindent, newl)
>   File "/usr/lib/python2.6/site-packages/_xmlplus/dom/minidom.py",
> line 816, in writexml
>     _write_data(writer, attrs[a_name].value)
>   File "/usr/lib/python2.6/site-packages/_xmlplus/dom/minidom.py",
> line 306, in _write_data
>     writer.write(data)
> UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in
> position 41: ordinal not in range(128)
> 
> La ultima línea me hizo pensar en algún caracter extraño pero el
> archivo es generado correctamente por la misma librería y donde se
> corta el XML son caracteres válidos, aquí el código que estoy usando:
> 
> # This Python file uses the following encoding: utf-8
> from xml.dom import minidom
> 
> archivo = open('sellob64.txt', 'r')
> sello = archivo.read()
> archivo.close()
> 
> domDoc = minidom.parse('Factura.xml')
> nodo = domDoc.getElementsByTagName('Comprobante')
> nodo[0].setAttribute('sello',sello)
> 
> archivo = open('Factura.xml', 'w')
> domDoc.writexml(archivo)
> archivo.close()
> 
> Puedo usar la versión 3, pero todo lo he venido haciendo en 2.6 y me
> gustaría seguir haciéndolo. Uso ArchLinux x64 pero lo probé también en
> un Ubuntu 10.04 con el mismo resultado.
> 
> ¿Alguna idea para seguir investigando?
> 
> 
> Saludos y gracias
> 


Hola de nuevo...

A fin de cuentas los caracteres extraños son caracteres acentuados, lo
averigüe con un simple 

print u'\xf3'  # ó

Cuando genero el archivo XML lo genera correctamente con acentos, estos
solo están en valores de los campos, no en los nombres. Ahora entiendo
por que la mayoría de las factura electrónicas que recibo no tienen
acentos. Pero lo que no entiendo, es; ¿por que puedo generar con acentos
y sin problemas el XML guardando el archivo con la línea 

archivo.write(domDoc.toxml())

pero no puedo guardarlo cuando lo he editado usando la misma línea?

¿Alguna idea?


Saludos


-- 
Mauricio Baeza

10 años usando OpenOffice.org, libre, gratuito y seguro
____________________________
Todo lo que no es dado es perdido
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a