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.ElementTree
Moduls, 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 lxml
eine 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 for
Schleife auch zum Bearbeiten mehrerer ähnlicher Elemente verwenden.