Es importante comprender el código de forma correcta antes de utilizarlo a tu trabajo si tquieres aportar algo puedes compartirlo con nosotros.
Solución:
Sea cual sea su XML string es decir, puede escribirlo en el archivo de su elección abriendo un archivo para escribir y escribir el string al archivo
from xml.dom import minidom
xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml(indent=" ")
with open("New_Database.xml", "w") as f:
f.write(xmlstr)
Existe una posible complicación, especialmente en Python 2, que es menos estricta y menos sofisticada con respecto a los caracteres Unicode en las cadenas. Si tu toprettyxml
método devuelve un Unicode string (u"something"
), entonces es posible que desee convertirlo a una codificación de archivo adecuada, como UTF-8. Por ejemplo, reemplace la línea de escritura con:
f.write(xmlstr.encode('utf-8'))
Encontré una manera usando ElementTree directo, pero es bastante complejo.
ElementTree tiene funciones que editan el texto y la cola de los elementos, por ejemplo, element.text="text"
y element.tail="tail"
. Tienes que usarlos de una manera específica para que las cosas se alineen, así que asegúrate de conocer tus personajes de escape.
Como ejemplo básico:
tengo el siguiente archivo:
76939
266720
3569
Para colocar un tercer elemento y mantenerlo bonito, necesita el siguiente código:
addElement = ET.Element("data") # Make a new element
addElement.set("version", "3") # Set the element's attribute
addElement.tail = "n" # Edit the element's tail
addElement.text = "ntt" # Edit the element's text
newData = ET.SubElement(addElement, "data") # Make a subelement and attach it to our element
newData.tail = "nt" # Edit the subelement's tail
newData.text = "5431" # Edit the subelement's text
root[-1].tail = "nt" # Edit the previous element's tail, so that our new element is properly placed
root.append(addElement) # Add the element to the tree.
Para sangrar las etiquetas internas (como la etiqueta de datos interna), debe agregarla al texto del elemento principal. Si desea sangrar algo después de un elemento (generalmente después de subelementos), colóquelo en la cola.
Este código da el siguiente resultado cuando lo escribes en un archivo:
76939
266720
3569
5431
Como otra nota, si desea que el programa use uniformemente t
es posible que desee analizar el archivo como un string primero, y reemplace todos los espacios para las sangrías con t
.
Este código se hizo en Python3.7, pero aún funciona en Python2.7.
Instalar bs4
pip install bs4
Use este código para imprimir bastante:
from bs4 import BeautifulSoup
x = your xml
print(BeautifulSoup(x, "xml").prettify())
Tienes la posibilidad comunicar este enunciado si si solucionó tu problema.