Kein xml.dom.ext unter Windows?

Probleme bei der Installation?
Antworten
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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

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?
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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

*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:
max2

Prima!, funktioniert. Was hat das mit der Helperclass auf sich?, falls Du das zwei Sätzen erklären kannst.

Schon mal danke

max
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
max2

Ah, ja. Danke für die Antworten!

max
Antworten