Python – Element Tree está eliminando la statement XML

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') .