Según the documentation:
escritura (archivo, codificación = "us-ascii", xml_declaration = Ninguno, 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 escribir. la codificación 1 es la codificación de salida (el valor predeterminado es US-ASCII). xml_declaration controla si se debe agregar una declaración XML al archivo. Use False para never, True for always, None para solo si no es US-ASCII o UTF-8 (el valor predeterminado es None). El método es "xml", "html" o "text" (el valor predeterminado es "xml"). Devuelve una cadena codificada.
Así, write(noteFile)
está diciendo explícitamente que escribir una declaración XML sólo si la codificación no es de US-ASCII o UTF-8, y que la codificación es US-ASCII; por lo tanto, no obtienes ninguna declaración.
supongo si usted no leyó mucho este hecho, su siguiente pregunta va a ser "¿Por qué mi Unicode roto", así que vamos a arreglar dos a la vez:
ET.ElementTree(root).write(noteFile, encoding="utf-8", xml_declaration=True)
¡Ah! De acuerdo, no me di cuenta de que estaba reformando por completo el documento, gracias, es muy útil saberlo. –
Bueno, depende de la implementación de ElementTree decidir si generar todo el XML desde cero o reutilizar las piezas existentes. Creo que 'lxml' tiene un caché bastante inteligente, por lo que si solo lee en un archivo pequeño y lo vuelve a escribir, reutiliza todo el nodo raíz. Pero la declaración no es parte del nodo raíz, por lo que realmente no hay forma de evitarlo. – abarnert
Si la solución arriba aceptada no funciona para usted, por favor revise la respuesta de @Olli ya que su pequeña modificación me salvó el día – ToTenMilan