Python, wie Streifen weiß-Leerzeichen aus dem xml-text Knoten
Ich habe eine xml-Datei wie folgt
<Person>
<name>
My Name
</name>
<Address>My Address</Address>
</Person>
Den tag hat extra neue Leitungen, gibt es einen schnellen Pythonic Weg, um trim und generieren Sie eine neue xml.
Fand ich dies, aber es kürzt nur die zwischen tags nicht Wert
https://skyl.org/log/post/skyl/2010/04/remove-insignificant-whitespace-from-xml-string-with-python/
Update 1 - Griff-folgende xml-die Rute Räume in <name>
tag
<Person>
<name>
My Name<shortname>My</short>
</name>
<Address>My Address</Address>
</Person>
Akzeptierte Antwort Griff über beide Arten von xml
Update 2 - ich habe meine version in der Antwort unten, ich verwende es zum entfernen alle Arten von Leerzeichen und erzeugen ziemlich xml-Datei mit xml-Codierungen
https://stackoverflow.com/a/19396130/973699
- Sie haben eventuell mehr Erfolg mit JSON
- dies wird von den anderen app und bevor es um mein python-Programm für die Validierung
- Dein weiteres Beispiel (auf der die akzeptierten Antworten nicht funktioniert) ist nicht wohlgeformt. Seien Sie vorsichtig mit den start - und end-tags. Und btw, Sie sind "die Pfosten". Ich denke, man sollte eine neue Frage stellen.
- Ja, das könnte ich gefragt habe eine andere Fragen, aber ich dachte, es ist im Zusammenhang, so wird es toll, wenn die beste Lösung gibt es in diesem thread selbst. Ich habe meine version in Antwort stackoverflow.com/a/19396130/973699
- Ich habe gerade gelesen das, ich Mach das nächste mal . meta.stackexchange.com/questions/153360/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
lxml
können Sie iterieren über alle Elemente und überprüfen, ob es text zustrip()
:Ergibt:
UPDATE Streifen
tail
text zu:print(etree.tostring(root, encoding="utf-8", xml_declaration=True))
tail
Eigenschaft, die entfernt werden können, zu. Ich habe aktualisiert die Antwort auf die Anpassung an Ihre neuen Fall.Akzeptierte Antwort Birei mit lxml macht den job perfekt, aber ich wollte es schneiden alle Arten von weiß - /Leerzeichen, Leerzeilen und regenerieren ziemlich xml in einer xml-Datei.
Folgenden code getan, was ich wollte
Haben Sie zu tun, xml-parsing für die eine oder andere Weise, also vielleicht verwenden
xml.sax
und kopieren Sie die Ausgabe-stream zu jedem Ereignis (das überspringenignorableWhitespace
), und hinzufügen von tag-Markierungen, wie gebraucht. Überprüfen Sie die Beispiel-code hier http://www.knowthytools.com/2010/03/sax-parsing-with-python.html.Können Sie beautifulsoup. Tun Durchlaufen alle Elemente und für jedes eine, die enthält text, ersetzen Sie es mit Ihrer stripped-version:
Vorausgesetzt
xmlfile
mit dem Inhalt der Frage, es ergibt sich:Ich arbeite mit einer älteren version von Python (2.3), und ich bin derzeit stecken mit der standard-Bibliothek. Zeigen Sie eine Antwort, die ist sehr stark abwärtskompatibel, die ich geschrieben habe, das mit
xml.dom
undxml.minidom
Funktionen.Es ist zwar nicht
BeautifulSoup
diese Lösung ist Recht elegant und nutzt die volle Kraft der Low-level-API. Beachten Sie, dass die tatsächliche Formatierung ist nur eine Zeile 🙂Dokumentation der API-Aufrufe verwendet hier:
minidom.parse
minidom.Knoten.writexml
- codecs.open