2008-11-20 6 views
8

Ich bin auf der Suche nach einem einfach zu handhabenden nativen Python-Modul zum Erstellen von Python-Objektdarstellung aus XML.Modul zum Erstellen von Python-Objektdarstellung aus XML

Ich habe mehrere Module über google gefunden (einer davon ist XMLObject), wollte aber nicht alle ausprobieren.

Was denken Sie, ist der beste Weg, solche Dinge zu tun?

EDIT: Ich vermisse zu erwähnen, dass das XML, das ich lesen möchte, nicht von mir generiert wird. Es ist eine existierende XML-Datei in einer Struktur, auf die ich keine Kontrolle habe.

+0

Möchten Sie nur ein Objekt serialisieren? Oder ist XML eine harte Anforderung? –

+0

Ich muss vorhandene XML-Dateien lesen - XML ​​ist also eine harte Anforderung – Martin

Antwort

12

Sie sagen, Sie wollen eine Objekt Darstellung, die ich interpretieren würde bedeuten, dass Knoten Objekte, und die Attribute und Kinder des Knotens werden als Attribute des Objekts (möglicherweise nach einem Schema) dargestellt. Dies ist, was XMLObject tut, glaube ich.

Es gibt einige Pakete, die ich kenne. 4Suite enthält einige Tools, um dies zu tun, und ich glaube, Amara implementiert dies speziell (auf 4Suite gebaut). Sie können auch lxml.objectify verwenden, die von Amara und gnosis.xml.objectify inspiriert wurde.

Natürlich ist eine dritte Option, bei einer konkreten Darstellung des XML (mit ElementTree oder lxml) können Sie ein eigenes benutzerdefiniertes Modell erstellen. lxml.html ist ein Beispiel dafür, die Basisschnittstelle von lxml mit einigen HTML-spezifischen Funktionen zu erweitern.

+0

Stimmen Sie mit Ihrer Interpretation überein. –

+0

Sind 4Suite und lxml in Python geschrieben? Ich wollte keine Binärdateien installieren, um solch ein triviales Problem zu lösen. – Martin

3

Ich habe gehört das einfachste ist ElementTree, obwohl ich selten mit XML arbeite und ich kann nichts aus Erfahrung sagen.

1

Python Gurke und cPickle Module für Python Objektserialisierung hat. Beide dieser Module bieten Funktionalität zum Serialisieren/Deserialisieren Python Objekthierarchie zu/von einem Bytestrom zu umwandeln:

Das folgende stellt ähnliche Schnittstelle: Beize(), unpickle() für die Serialisierung zu/von XML

+0

Es tut mir leid .. Ich vermisse zu erwähnen, dass das XML, das ich gerne lesen würde, nicht von mir generiert wird. Es ist eine existierende XML-Datei in einer Struktur, auf die ich keine Kontrolle habe. – Martin

1

I Verwenden Sie (und wie) PyRXP, das ein Tupel erstellt, das aus dem XML-Dokument erstellt wird. Das Hauptproblem bei einer direkten XML -> Python-Objektstruktur ist, dass es für eine attributierte Liste kein Python-Analog gibt - also eine Liste mit Elementen, die zufällig auch Attribute haben. Wenn Sie möchten, ist es gleichzeitig eine Liste und ein Wörterbuch.

Ich analysiere das Ergebnis von PyRXP, und erstellen Sie die Liste/Wörterbuch abhängig von der Struktur - die XML, mit der ich es zu tun habe, ist entweder Liste oder Attribut-basierte, nie beides. (Ich verwende Daten von einer bekannten Quelle).

+0

PyRXP ist kein natives Python-Modul, oder? – Martin

+1

Nein, es ist ein 3rd-Party-Modul, möglicherweise in C geschrieben. Ich muss diesen Teil der Frage verpasst haben. –

3

Es gibt auch die ausgezeichnete 3rd Party Bibliothek pyxser für Python.

pyxser steht für Python XML Serialisierung und ist ein Python-Objekt zu XML-Serializer und Deserializer. In anderen Worten, kann es ein Python Objekt in XML konvertieren und auch das XML zurück in das ursprüngliche Python Objekt konvertieren.

Verwandte Themen