Seite 1 von 1
newline in XMLGenerator
Verfasst: Mittwoch 12. November 2014, 19:40
von Hazzard
Hi,
ich verwende den
XMLGenerator um XML Dateien zu erzeugen. Allerdings wird das xml komplett ohne Zeilenumbrüche ausgegeben. Weiß jemand wie man hier Zeilenumbrüche in das XML bekommt? Es muss nicht mal schön eingrückt sein oder so, nur ein paar Umbrüche zur besseren Lesbarkeit im Texteditor. Eine andere Pythonklasse geht auch nicht, weil die Datei zu groß ist, um sie komplett im Speicher zu erzeugen.
Vielen Dank.
Re: newline in XMLGenerator
Verfasst: Mittwoch 12. November 2014, 19:57
von BlackJack
@Hazzard: Kannst Du nicht einfach an den Stellen wo Du Zeilenumbrüche haben möchtest welche mit `characters()` einfügen‽
Re: newline in XMLGenerator
Verfasst: Mittwoch 12. November 2014, 20:06
von Sirius3
@Hazzard: Du mußt halt entsprechende `characters` einfügen. Natürlich kannst Du auch Monkey-Patchen:
Code: Alles auswählen
XMLGenerator.endElement = lambda self, name: self._write(u'</%s>\n' % name)
XMLGenerator.endElementNS = lambda self, name, qname: self._write(u'</%s>\n' % self._qname(name))
Re: newline in XMLGenerator
Verfasst: Mittwoch 12. November 2014, 20:10
von Hazzard
Danke für die Antworten. Das mit dem patchen ist eine nette Idee.
Re: newline in XMLGenerator
Verfasst: Donnerstag 13. November 2014, 12:19
von Boa
Du kannst die Formatierung von BeautifulSoup verwenden:
Code: Alles auswählen
from bs4 import BeautifulStoneSoup
print BeautifulSoup('<xml><hi></hi></xml>', features='xml').prettify()
Dann brauchst du dich nicht manuell um das Einfügen der Zeilenumbrüche zu kümmern und bekommst gleich noch eine übersichtliche Einrückung dazu.
Re: newline in XMLGenerator
Verfasst: Donnerstag 13. November 2014, 12:46
von BlackJack
@Boa: Und wie soll das funktionieren ohne das XML, das zu gross für den Hauptspeicher ist, in den Hauptspeicher zu lesen?
Re: newline in XMLGenerator
Verfasst: Donnerstag 13. November 2014, 13:03
von Boa
BlackJack hat geschrieben:@Boa: Und wie soll das funktionieren ohne das XML, das zu gross für den Hauptspeicher ist, in den Hauptspeicher zu lesen?
Ich kann es bei mir nur schwer ausprobieren da mein Arbeitsspeicher zu groß ist, aber wird dabei nicht einfach die Auslagerungsdatei/swap/virtueller Arbeitsspeicher verwendet?
Re: newline in XMLGenerator
Verfasst: Donnerstag 13. November 2014, 13:18
von cofi
Selbst wenn die Swap Kapazitaeten gross genug waeren, heisst das trotzdem, dass statt Speicher SSDs oder Festplatten benutzt werden mit Zugriffszeiten die Groessenordnungen langsamer sind.
Re: newline in XMLGenerator
Verfasst: Donnerstag 13. November 2014, 14:28
von BlackJack
@Boa: Schön das *Dein* Arbeitsspeicher zu gross ist, aber es soll auch gerüchteweise Rechner geben die kein 64-Bit-System und Terabyte an RAM haben.

Ich denke mal der OP kennt die Grenzen seiner Hardware wenn er sagt das geht nicht.
Re: newline in XMLGenerator
Verfasst: Donnerstag 13. November 2014, 14:44
von Boa
Hmm, na war nur ein Vorschlag. Ob es klappt kann man ja einfach ausprobieren. Ggf. ist die Zeichenkette wenn sie einmal als Datei vorliegt auch klein genug im Gegensatz zur Representation die mit XMLGenerator erzeugt wird. Ansonsten könnte man auch einfach den swap Platz vergößern.
@cofi: Es wurde nicht gesagt, dass Anforderungen an die Geschwindigkeit bestehen.
Re: newline in XMLGenerator
Verfasst: Donnerstag 13. November 2014, 14:57
von BlackJack
@Boa: Es gibt Netbooks, es gibt Embedded Systeme, …, man kann nicht einfach überall Speicher vergrössern. Versuch das mal bei einem Raspberry Pi mit 512 MiB RAM und einer SD-Karte oder externem Massenspeicher der per USB angebunden ist. Da wirst Du mit Swap keine Freude haben. Auch wenn Geschwindigkeit nicht erwähnt wurde kann man damit nicht argumentieren, denn das wird auf jeden Fall *unbrauchbar* langsam.