Python und vernünftige DOM2 Unterstützung (fehlende NS's)

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
zipdrive
User
Beiträge: 25
Registriert: Dienstag 2. Januar 2007, 20:33

Hallo ich möchte mit Python2.5 eine XML - Datei schreiben. Da PyXML nicht weiter für zukünftige Python - Versionen ab 2.5 zur Verfügung steht und die Module nur sehr buggy arbeiten, wollte ich mal fragen welche Alternativen man hat?

Mein Problem ist, dass kein Modul vernünftig arbeitet und mir die trotz createElementNS erstellten Elemente die Namespaces nicht in die Datei reinschreibt.

Ich habs mit xml.dom, xml.dom.minidom, xml.sax.utils und xml.etree.ElementTree versucht, doch ohne Erfolg.

Kann mir da jemand weiterhelfen, ich brauch diese Namespace - Attribute.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo und willkommen im Forum!

Du kannst noch lxml und 4suite ausprobieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Hast du in ElementTree die Elemente auch mit ElementTree.Element('{hier_der_namespace}element_name') erstellt? Und einen Namespace-Handler gibt es da auch, wenn du einen eigenen TreeBuilder haben willst.
zipdrive
User
Beiträge: 25
Registriert: Dienstag 2. Januar 2007, 20:33

Das ist alles nicht sehr zufriedenstellend, ich dachte Python wäre modern, doch eine vollständig Unterstützung von aktuellen Webstandards fehlt völlig.

Gut 4Suite geht einigermaßen, ist aber auch sehr umständlich an einigen Ecken.

Mal schaun ob Ruby Module hat, die den dom3 unterstützen und mit denen man vernünftige XML schreiben kann.

Entschuldigt meinen Unmut nach dem 1. Posting.

Grüße
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

zipdrive hat geschrieben:Das ist alles nicht sehr zufriedenstellend, ich dachte Python wäre modern, doch eine vollständig Unterstützung von aktuellen Webstandards fehlt völlig.
Tja. Wer zu dumm ist Dokumentation zu lesen...
http://paste.pocoo.org/show/542/ :roll:
Und hey. Das ist ein Standard. Hoops. Wenn dir das zu aufwändig/umständlich ist schau dir halt ElementTree an der, hey, auch Teil Pythons ist?
Entschuldigt meinen Unmut nach dem 1. Posting.
Nein.
TUFKAB – the user formerly known as blackbird
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Hi und Willkommen im Forum.
zipdrive hat geschrieben:Das ist alles nicht sehr zufriedenstellend,
Warum? Wenn du was nicht kapierst frag doch nach und es werden dir sicherlich viele hier im Forum dabei helfen :) An Python und dem XML Package liegt es sicherlich nicht ;) Ich kenne mich zwar nicht mit XML so gut aus, aber wage zu behaupten das dass mitgelieferte Package schon 1A ist und das sich vorallem die DOM Implementierung an dem Standard hält, weil sonst ganz schnell von den Pythonisten daran was geändert werden würde ;) -> Darauf kannst du dich verlassen!
zipdrive hat geschrieben: ich dachte Python wäre modern,
Ist es auch :)
zipdrive hat geschrieben: doch eine vollständig Unterstützung von aktuellen Webstandards fehlt völlig.
Echt? Was genau vermisst du in Python an aktuellen webstandards (was aber nichts mit Python direkt zu tun hat). Meiner Meinung nach deckt alleine schon die Standardbibliothek so ziemlich fast jeden Bereich ab. Und wem das nicht genügt der kann zusätzlich auf die 20K andren Libs/Module zurückgreifen die es im Web so gibt. -> Z.B. hier: http://cheeseshop.python.org/pypi?%3Aaction=browse
Entschuldigt meinen Unmut nach dem 1. Posting.
Naja, wie wäre es den mal wenn du uns mal zeigst was du bisher so hast und was du gerne an den stellen machen würdest? Ich würde nicht in vornherein davon ausgehen das dass XML Package die schuld daran trägt, sondern das du da was nicht richtig machst.

BlackBird hat ja schon ein Beispiel zu xml.dom gepostet. Entspricht das deiner Vorstellung? Hast du dir das xml.etree.ElementTree wirklich ganz genau angesehen? Damit hatte ich letztes Jahr was in Richtung RSS-Feeds gemacht und hatte null Probleme.

lg
sape
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Wo genau ist da jetzt der Zusammenhang zwischen XML-Namespaces und Webstandards? Etwa, weil man bei XHTML den Namespace angibt?

Und was "modern" betrifft, so habe ich noch keine so schöne Möglichkeit gefunden, mit XML zu arbeiten, wie sie ET bietet. Ob man eine Library unbedingt als Eigenschaft einer Programmiersprache betrachten muss (auch wenn das Hinzufügen von ET zur Standarddistribution kürzlich erfolgte), sei mal dahingestellt.
zipdrive
User
Beiträge: 25
Registriert: Dienstag 2. Januar 2007, 20:33

Ok vielleicht könnt ihr ja meine Problem, die mir so aufgefallen sind lösen.

Mit ElementTree kann man ansich recht fix XML - Dokumente erstellen, dank _namespace_map kann man ja uri's mit den entsprechenden Prefixen ausstatten. Hier stehen dann auch alle NS - Attribute im Tree.

Wie kann man die Ausgabe bei ElementTree formatieren, ich möchte Einrückungen haben.

Dann speichere ich diesen Tree mit write.

Wie kann ich jetzt diese XML wieder auslesen, es sollen mir mit dem Dokument der DOM zur Verfügung stehen und irgendwie muss ich den veränderten Baum dann wieder speichern können! Wie macht man das am besten?

Grüße
BlackJack

zipdrive hat geschrieben:Wie kann man die Ausgabe bei ElementTree formatieren, ich möchte Einrückungen haben.
Eine simple prettyprint-Funktion gibt's beim Effbot. Die kann man aber nicht mehrfach anwenden. Prettyprinting ist sowieso so eine Sache die eigentlich ein DTD oder Schema benötigt um richtig funktionieren zu können. Man muss schliesslich wissen wo man "whitespaces" einfach so einfügen darf und wo nicht.
Dann speichere ich diesen Tree mit write.

Wie kann ich jetzt diese XML wieder auslesen, es sollen mir mit dem Dokument der DOM zur Verfügung stehen und irgendwie muss ich den veränderten Baum dann wieder speichern können! Wie macht man das am besten?
Na das XML einfach wieder parsen. Ich verstehe das Problem jetzt nicht so ganz!?
zipdrive
User
Beiträge: 25
Registriert: Dienstag 2. Januar 2007, 20:33

gut ich weiß wie ich eine Datei zu parsen habe, aber wie kann man das modifizierte Dokument wieder speichern, ich hab nichts passendes gefunden, womit ich das machen kann.

Kannst du vielleicht mal ein Bsp geben, wenn ich "myxml.xml" öffnen, bearbeiten und wieder speichern möchte!?

Grüße
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Mit ``write``?
http://docs.python.org/lib/elementtree- ... l#l2h-1978
write( file[, encoding])
Writes the element tree to a file, as XML. file is a file name, or a file object opened for writing. encoding is the output encoding (default is US-ASCII).
lg
zipdrive
User
Beiträge: 25
Registriert: Dienstag 2. Januar 2007, 20:33

Ok so kann man es vielleicht mit EmenetTrees machen, doch wie geht das wenn ich zb mit 4suite ein Dokument öffne, bearbeite und speichern möchte. Soweit ich die Dokumentation überblickt habe gibt es keine Möglichkeit ein geparstes Dokument wieder abzuspeichern, auf ganau das selbe File. Oder muss man da irgendwelche Kunstkniffe anwenden?
BlackJack

Die Dokumentation hast Du aber schon gelesen, oder? Kleiner Tip: ein DOM in eine externe XML-Repräsentation überführen, heisst in XML-Kreisen "serialisieren".
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

zipdrive hat geschrieben:Ok so kann man es vielleicht mit EmenetTrees machen, doch wie geht das wenn ich zb mit 4suite ein Dokument öffne[...]
Moment, 0o. Ich will dich nur daran erinnern das du von ``ElementTree`` am Anfang geredet hast ->
Ok vielleicht könnt ihr ja meine Problem, die mir so aufgefallen sind lösen.

Mit ElementTree kann man ansich recht fix XML - Dokumente erstellen, dank _namespace_map kann man ja uri's mit den entsprechenden Prefixen ausstatten. Hier stehen dann auch alle NS - Attribute im Tree.

Wie kann man die Ausgabe bei ElementTree formatieren, ich möchte Einrückungen haben.

Dann speichere ich diesen Tree mit write.

Wie kann ich jetzt diese XML wieder auslesen, es sollen mir mit dem Dokument der DOM zur Verfügung stehen und irgendwie muss ich den veränderten Baum dann wieder speichern können! Wie macht man das am besten?

Grüße
Darauf hat BlackJack eine Antwort geliefert. Die darauf folgenden posts von dir hatte nicht "4suite" erwähnt und daher bin ich davon ausgegangen das sich das immer noch auf ``ElementTree`` bezieht. Ergo: Daher die Antwort das du das mit ``write`` machen kannst.

lg
zipdrive
User
Beiträge: 25
Registriert: Dienstag 2. Januar 2007, 20:33

Entschuldige, da habe ich wohl den roten Faden meines eigen Beitrags verlohren. Ok das mit serialisieren war mir nicht geläufig... damit wär ich jetzt eigentlich zufrieden!

Danke an alle
Antworten