XML ändern und in eine Datei schreiben – Beautiful Soup

XML ändern und in eine Datei schreiben – Beautiful Soup

Ich verwende Python Beautiful Soup, um eine XML-Datei zu analysieren und sie nach dem Löschen bestimmter Tags in eine andere Datei zu schreiben. Die Verwendung von soup.prettify ändert jedoch andere XML-Namespaces und Attributnamen.

f = öffnen('neu.xml',"w"); f.schreiben(soup.prettify(formatter="xml")); f.schließen();

Die Änderungen sind wie im folgenden Beispiel angegeben.

Original-XML-Datei.

<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"/>

Neue XML-Datei aus soup.prettify geschrieben.

  <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"/>

Ich habe versucht, utf-8 zu prettify() hinzuzufügen. Aber es ist das gleiche Problem. Gibt es eine andere Methode, um ein bestimmtes Tag basierend auf der Suche zu löschen und alle anderen XML-Inhalte in der Datei intakt zu halten? Bitte schlagen Sie vor.

Antwort1

Erwägen Sie die Verwendung eines nativen xml.etree.ElementTreeModuls, das eine einfache und effiziente API zum Parsen und Erstellen von XML-Daten implementiert. Es ist schneller, besser, einfacher undpythonisch.

Sie können ein bestimmtes Element mit entfernen Element.remove().

Ein grundlegendes Beispiel wird gegebenHier.

Wenn Sie jedoch darauf bestehen,Schöne Suppe(es verwendet lxmleine erweiterte Version des nativen Py-Moduls), Sie können

# 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>)

Sie können eine forSchleife auch zum Bearbeiten mehrerer ähnlicher Elemente verwenden.

verwandte Informationen