newline in XMLGenerator

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hazzard
User
Beiträge: 26
Registriert: Dienstag 4. Dezember 2007, 21:09

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.
BlackJack

@Hazzard: Kannst Du nicht einfach an den Stellen wo Du Zeilenumbrüche haben möchtest welche mit `characters()` einfügen‽
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@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))
Hazzard
User
Beiträge: 26
Registriert: Dienstag 4. Dezember 2007, 21:09

Danke für die Antworten. Das mit dem patchen ist eine nette Idee.
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

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.
BlackJack

@Boa: Und wie soll das funktionieren ohne das XML, das zu gross für den Hauptspeicher ist, in den Hauptspeicher zu lesen?
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

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?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
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.
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

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.
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.
Antworten