Seite 1 von 1

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

Verfasst: Dienstag 2. Januar 2007, 20:42
von zipdrive
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.

Verfasst: Dienstag 2. Januar 2007, 20:48
von Leonidas
Hallo und willkommen im Forum!

Du kannst noch lxml und 4suite ausprobieren.

Verfasst: Dienstag 2. Januar 2007, 22:20
von Y0Gi
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.

Verfasst: Mittwoch 3. Januar 2007, 01:24
von zipdrive
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

Verfasst: Mittwoch 3. Januar 2007, 08:55
von mitsuhiko
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.

Verfasst: Mittwoch 3. Januar 2007, 09:57
von sape
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

Verfasst: Mittwoch 3. Januar 2007, 14:22
von Y0Gi
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.

Verfasst: Samstag 6. Januar 2007, 01:22
von zipdrive
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

Verfasst: Samstag 6. Januar 2007, 10:14
von 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!?

Verfasst: Samstag 6. Januar 2007, 14:52
von zipdrive
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

Verfasst: Samstag 6. Januar 2007, 15:01
von sape
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

Verfasst: Montag 8. Januar 2007, 14:09
von zipdrive
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?

Verfasst: Montag 8. Januar 2007, 15:06
von 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".

Verfasst: Montag 8. Januar 2007, 15:24
von sape
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

Verfasst: Montag 8. Januar 2007, 19:04
von zipdrive
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