Saltar al contenido

¿Cómo hago para que ElementTree de Python se imprima en un archivo XML?

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 tes 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.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *