Estoy escribiendo algunos XML con el árbol de elementos.
Le doy al código un archivo de plantilla vacío que comienza con la statement XML: Cuando ET ha terminado de realizar sus cambios y escribe el XML completado para eliminar la statement y comenzar con la etiqueta raíz . ¿Cómo puedo detener esto?
Escribir llamada:
ET.ElementTree(root).write(noteFile)
Según la documentación :
write (file, encoding = “us-ascii”, xml_declaration = None, method = “xml”)
Escribe el árbol de elementos en un archivo, como XML. archivo es un nombre de archivo o un objeto de archivo abierto para escritura. la encoding 1 es la encoding de salida (el valor predeterminado es US-ASCII). xml_declaration controla si se debe agregar una statement XML al archivo. Use Falso para nunca, Verdadero para siempre, Ninguno solo si no es US-ASCII o UTF-8 (el valor predeterminado es Ninguno). el método es “xml”, “html” o “text” (el valor predeterminado es “xml”). Devuelve una cadena codificada.
Entonces, write(noteFile)
le dice explícitamente que escriba una statement XML solo si la encoding no es US-ASCII o UTF-8, y que la encoding es US-ASCII; por lo tanto, usted no recibe ninguna statement.
Supongo que si no leíste tanto, tu próxima pregunta será “por qué mi Unicode está roto”, así que vamos a solucionar ambos al mismo tiempo:
ET.ElementTree(root).write(noteFile, encoding="utf-8", xml_declaration=True)
Existen diferentes versiones de ElementTree. Algunos de ellos aceptan el argumento xml_declaration
, otros no.
El que yo tengo no lo tiene. Emite la statement si y solo si la encoding != 'utf-8'
. Entonces, para obtener la statement, llamo a write(filename, encoding='UTF-8')
.