Seite 1 von 1

Kein xml.dom.ext unter Windows?

Verfasst: Sonntag 23. Januar 2005, 16:41
von max2
Hallo,

zum Durchsuchen einer XML-Datei verwende ich das folgende import-Konstrukt:

Code: Alles auswählen

from xml.dom.ext.reader.Sax2 import FromXmlStream
was man so auch in vielen Beispielen findet. Unter Linux (RedHat 9 mit Python 2.2.2) funktioniert es prima, aber unter Windows (XP mit Python 2.3.2) kommt nur die Fehlermeldung: "ImportError: No module named ext.reader.Sax2"
Das stört natürlich, also habe ich mal probiert: ">>> import xml.dom.ext" geht unter Linux, unter Windows nicht ("ImportError: No module named xml.dom.ext") . :( Mein sys.path sieht so aus:

['', 'C:\\WINDOWS\\System32\\python23.zip', 'C:\\Python23\\Lib\\site-packages\\Pythonwin', 'C:\\Python23\\Lib\\site-packages\\win32', 'C:\\Python23\\Lib\\site-packages\\win32\\lib', 'C:\\Python23\\Lib\\site-packages', 'C:\\Python23\\DLLs', 'C:\\Python23\\lib', 'C:\\Python23\\lib\\plat-win', C:\\Python23\\lib\\lib-tk', 'C:\\Python23']

Wo ist hier das Problem? XML zu parsen ist doch nichts plattformabhängiges. Muss ich noch irgendwas nachinstallieren? Danke im voraus
max

Verfasst: Sonntag 23. Januar 2005, 17:10
von Milan
Das Problem ist, dass dieses Modul / die Klasse wohl nur vorhanden ist, weil sie als Bibliothek gebraucht wird. Im Modulindex kann ich überhaupt kein package xml.dom.ext finden, ergo muss es wohl unter Linux eine Hilfsfunktion haben, aber eben auch nicht offiziell sein. Wundert mich, dass man es dann trotzdem verwendet :?: Welche Funktion sollte dieses Package denn haben bzw in was für Beispielen findet man das so?

xml.dom.ext

Verfasst: Sonntag 23. Januar 2005, 17:48
von max2
Hi Milan,

erstmal danke für die schnelle Reaktion! Beispiele für die Verwendung von xml.dom.ext:

http://aspn.activestate.com/ASPN/Cookbo ... /index_txt
http://www.linux-magazin.de/Artikel/aus ... ython.html u.v.a

aber auch in O'Reillys "Python + XML" (4.4.1.1), und nirgends steht was von Plattform-Abhängigkeit.

Ich weiß nicht was man noch mit xml.dom.ext machen kann, aber FromXMLStream ist ziemlich praktisch (und total einfach) zum Finden von Nodes mit bestimmten Tagnamen:

Code: Alles auswählen

from xml.dom.ext.reader.Sax2 import FromXmlStream
...
carnodelist= FromXmlStream(myfile).getElementsByTagName("car")
...
Wenn die XML-Datei dann ungefähr so aussieht:

Code: Alles auswählen

...
<car> 
    <modell>Ferrari</modell>
    <minus>zu laut</minus>
    <minus>keine Hängerkupplung</minus>
</car>
<car> 
    <modell>Maybach</modell>
    <minus>schwer anzuschieben</minus>
</car>
<fahrrad>
    <modell>Sunn</modell>
    <minus>erhöht CO2-Emission</minus>
</fahrrad>
...
dann liefert der Python-Code nur die Car-Nodes zur Weiterverarbeitung. Und dafür brauche ich ein Konstrukt, welches auch unter Windows läuft. :? Was nun?

Grüße
max

Verfasst: Sonntag 23. Januar 2005, 18:02
von Milan
*hehe* hab ichs mir doch gedacht... ist nur ne Helperclass, dafür benutzt du am besten minidom:

Code: Alles auswählen

from xml.dom.minidom import parse
carnodelist= parse(myfile).getElementsByTagName("car")
Zuletzt vertrau ich immer noch der offiziellen Dokumentation statt einer anderen :wink: . Soweit ich die Beispiele dort gesehen habe ist das Resultat genau das gleiche...

ps: tolles Beispiel :lol: :lol: :lol:

Verfasst: Sonntag 23. Januar 2005, 18:32
von max2
Prima!, funktioniert. Was hat das mit der Helperclass auf sich?, falls Du das zwei Sätzen erklären kannst.

Schon mal danke

max

Verfasst: Sonntag 23. Januar 2005, 18:59
von Dookie
Hi max,

ich denke mal die Helperclass hat in dem Fall die Funktion, nicht im Betriebssystem integrierte Teile zu emulieren, bzw. eine Anpassung unterschiedlicher Implementierungen bei verschiedenen Umgebungen zu ermöglichen.


Gruß

Dookie

Verfasst: Sonntag 23. Januar 2005, 19:04
von max2
Ah, ja. Danke für die Antworten!

max