Modificación y escritura de XML para presentar una hermosa sopa.

Modificación y escritura de XML para presentar una hermosa sopa.

Estoy usando Python Beautiful Soup para analizar un archivo XML y escribirlo en un archivo diferente después de eliminar ciertas etiquetas. Pero el uso de sopa.prettify cambia otros espacios de nombres XML y nombres de atributos.

f = open('nuevo.xml',"w"); f.write(soup.prettify(formatter="xml")); f.cerrar();

Los cambios son los que se muestran en el ejemplo siguiente.

Archivo XML original.

<draw:control text:anchor-type="paragraph" draw:z-index="1" draw:style-name="gr1" draw:text-style-name="P2" svg:width="2.805cm" svg:height="1.853cm" svg:x="3.602cm" svg:y="0.824cm" draw:control="control2"/>

Nuevo archivo XML escrito desde sopa.prettify.

  <draw:control draw:control="control2" draw:style-name="gr1" draw:text-style-name="P2" draw:z-index="1" svg:height="1.853cm" svg:width="2.805cm" svg:x="3.602cm" svg:y="0.824cm" text:anchor-type="paragraph"/>

Intenté agregar utf-8 para embellecer(). Pero es el mismo problema. ¿Existe algún otro método para eliminar una etiqueta en particular basándose en la búsqueda y mantener intactos todos los demás contenidos XML del archivo? Por favor recomiende.

Respuesta1

Considere utilizar xml.etree.ElementTreeun módulo nativo que implemente una API simple y eficiente para analizar y crear datos XML. Es más rápido, mejor, más fácil ypitónico.

Puedes eliminar un elemento en particular usando Element.remove().

Se da un ejemplo básico.aquí.

Pero si insistes en usarhermosasopa(Utiliza lxmluna versión mejorada del módulo py nativo), puedes

# beautifulstonesoup for XML parsing
from BeautifulSoup import BeautifulStoneSoup 

xml_data = """
<draw:control text:anchor-type="paragraph" draw:z-index="1" draw:style-name="gr1" draw:text-style-name="P2" svg:width="2.805cm" svg:height="1.853cm" svg:x="3.602cm" svg:y="0.824cm" draw:control="control2"/>
"""
soup = BeautifulStoneSoup(xml_data)
print soup.prettify()
soup.find(<your tag/element).replaceWith(<whateveryouwant>)

También puedes utilizar un forbucle para editar varios elementos similares.

información relacionada