Stimmt. Die DocInfo properties sind wohl read-only. Vielleicht hilft Dir das weiter:
http://stackoverflow.com/questions/9918 ... xmls-etree
Lesen und Schreiben von kvtml Vokabeldateien
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Ich habs endlich geschafft.
Also, ich habe gerade gelesen, dass es nicht möglich ist den Doctype zu schreiben.
http://osdir.com/ml/python.lxml.devel/2 ... 00036.html
@Hyperion: Dein Link hat mir bei dem anderen Problem geholfen, nämlich mit der ersten Zeile.
Man muss einen Parameter an die write Methode übergeben:
Beim testen habe ich dann gemerkt, dass Parley die blöde Doctype Zeile gar nicht braucht.
Es klappt jetzt alles wunderbar.
Danke an alle die mir geholfen haben!!!
Vielleicht habt ihr ja noch ein paar Verbesserungsvorschläge.
http://www.python-forum.de/pastebin.php ... &mode=view



Also, ich habe gerade gelesen, dass es nicht möglich ist den Doctype zu schreiben.
http://osdir.com/ml/python.lxml.devel/2 ... 00036.html
@Hyperion: Dein Link hat mir bei dem anderen Problem geholfen, nämlich mit der ersten Zeile.
Man muss einen Parameter an die write Methode übergeben:
Code: Alles auswählen
tree.write(filename, xml_declaration=True, encoding="utf-8")
Es klappt jetzt alles wunderbar.
Danke an alle die mir geholfen haben!!!
Vielleicht habt ihr ja noch ein paar Verbesserungsvorschläge.

http://www.python-forum.de/pastebin.php ... &mode=view
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Es wird nicht so klar, was Dein Modul überhaupt können soll...
Mir ist das hier öfter aufgefallen:
Diese "if"-Kaskaden sind doch redundant! So geht 's doch einfacher.
Das taucht so in der Art mehrfach auf.
Mir ist das hier öfter aufgefallen:
Code: Alles auswählen
entries = tree.find('information')
for element in entries:
if element.tag == 'title':
properties['title'] = element.text
if element.tag == 'comment':
properties['comment'] = element.text
if element.tag == 'date':
properties['date'] = element.text
if element.tag == 'author':
properties['author'] = element.text
if element.tag == 'license':
properties['license'] = element.text
Code: Alles auswählen
entries = tree.find('information')
for element in entries:
properties[element.tag] = element.text
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Das ganze soll am Ende in einem Vokabeltrainer enden, der das Format kvtml beherscht.Hyperion hat geschrieben:Es wird nicht so klar, was Dein Modul überhaupt können soll...

Ich habe die Funktionen nun in Klassen gepackt. Eigentlich finde ich das in diesem Fall Klassen nicht so gut geeignet sind, aber ich wollte keine globalen Variablen haben.
Das Modul kann nun auch geschachtelte Lektionen auslesen und einlesen.
http://www.python-forum.de/pastebin.php?mode=view&s=11
@Ubuntuxer: Klassen wären in diesem Fall sicher gut, aber sicher nicht in dieser Aufteilung. Klassen sollten "Dinge" repräsentieren. Was bitte ist ein "Read" oder ein "Write"? Das sind Tätigkeiten und wären ein Namen für Funktionen.
Es würde mehr Sinn machen die Teile der XML-Datei als eigene Datentypen zu modellieren. Also zum Beispiel eine `Vocabulary`-Klasse mit einer statischen Methode oder einer Klassenmethode `load()` oder `parse()` um ein Exemplar aus XML zu erzeugen und einer `save()`-Methode, die mit Hilfe einer `to_xml()`-Methode auf den einzelnen Bestandteilen wieder ein XML-Dokument daraus macht.
Das kann man sicher auf mehrere sinvolle Unterklassen runterbrechen. Eine für die Informationen, für die einzelnen `identifier`-Elemente, einzelne `entry`-Objekte, Containerklassen für die einzelnen Lektionen und so weiter.
Es würde mehr Sinn machen die Teile der XML-Datei als eigene Datentypen zu modellieren. Also zum Beispiel eine `Vocabulary`-Klasse mit einer statischen Methode oder einer Klassenmethode `load()` oder `parse()` um ein Exemplar aus XML zu erzeugen und einer `save()`-Methode, die mit Hilfe einer `to_xml()`-Methode auf den einzelnen Bestandteilen wieder ein XML-Dokument daraus macht.
Das kann man sicher auf mehrere sinvolle Unterklassen runterbrechen. Eine für die Informationen, für die einzelnen `identifier`-Elemente, einzelne `entry`-Objekte, Containerklassen für die einzelnen Lektionen und so weiter.
Meinst du in etwa so oder verstehe ich dich da komplett falsch?BlackJack hat geschrieben:@Ubuntuxer: Klassen wären in diesem Fall sicher gut, aber sicher nicht in dieser Aufteilung. Klassen sollten "Dinge" repräsentieren. Was bitte ist ein "Read" oder ein "Write"? Das sind Tätigkeiten und wären ein Namen für Funktionen.
Es würde mehr Sinn machen die Teile der XML-Datei als eigene Datentypen zu modellieren. Also zum Beispiel eine `Vocabulary`-Klasse mit einer statischen Methode oder einer Klassenmethode `load()` oder `parse()` um ein Exemplar aus XML zu erzeugen und einer `save()`-Methode, die mit Hilfe einer `to_xml()`-Methode auf den einzelnen Bestandteilen wieder ein XML-Dokument daraus macht.
Code: Alles auswählen
class Vocabulary():
def __init__(self, filename=None):
self.filename = filename
def load(self):
def _get_lesson(self, element):
def _get_word(self, entry):
def save(self, vocabulary, properties):
def _set_container(self, element, lesson):
def _indent(self, elem, level=0):
Ich habe mal versucht ein Klassengerüst zu erstellen, aber ich tue mich damit unglaublich schwer. Die Möglichkeiten, die man mit einer Klasse und Vererbung hat, kann man sich anlesen. Ich finde es aber enorm schwierig die Möglichkeiten sinnvoll einzusetzen. Könnt ihr euch mein Grundgerüst mal anschauen und mir ein paar Tipps geben wie ich das besser aufbauen kann.Das kann man sicher auf mehrere sinvolle Unterklassen runterbrechen. Eine für die Informationen, für die einzelnen `identifier`-Elemente, einzelne `entry`-Objekte, Containerklassen für die einzelnen Lektionen und so weiter.
Bei den geschachtelten Lektionen habe ich noch gar keine Idee, wie man dies mit Klassen realisieren kann.

http://www.python-forum.de/pastebin.php?mode=view&s=13
@Ubuntuxer: Ich würde mich bei den Klassen grob an der XML-Struktur orientieren. Und Vererbung sehe ich da nicht wirklich. Durch Vererbung wird eine "ist-ein(e)"-Beziehung ausgedrückt. Das ist bei Deinen Vererbungen aber nicht der Fall. Eine Vokabel ist keine Beurteilung/Note und eine Lektion ist kein Sprachbezeichner.
Das Laden sollte IMHO nicht mit der `__init__()`-Methode verbunden sein -- man sollte auch solche Datenstrukturen erstellen können ohne auf eine Datei zugreifen zu müssen. Und der Dateiname gehört nicht zwingend zu so einem Objekt. Bei Dateien ist der Dateiname ja auch getrennt vom Inhalt gespeichert.
Das Laden sollte IMHO nicht mit der `__init__()`-Methode verbunden sein -- man sollte auch solche Datenstrukturen erstellen können ohne auf eine Datei zugreifen zu müssen. Und der Dateiname gehört nicht zwingend zu so einem Objekt. Bei Dateien ist der Dateiname ja auch getrennt vom Inhalt gespeichert.