Ich suche nach einem einfach zu handhabenden nativen Python-Modul, um eine Python-Objektdarstellung aus XML zu erstellen.
Ich habe mehrere Module über Google gefunden (eines davon ist XMLObject ), wollte aber nicht alles ausprobieren von ihnen.
Was denkst du, ist der beste Weg, solche Dinge zu tun?
BEARBEITEN: Ich habe vergessen 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.
Sie sagen, dass Sie eine -Objekt -Darstellung wünschen, die ich so interpretieren würde, dass Knoten zu Objekten werden und die Attribute und Kinder des Knotens als Attribute des Objekts dargestellt werden (möglicherweise nach einem Schema) ). Das 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 aufgebaut). Sie können auch lxml.objectify verwenden, das von Amara und gnosis.xml.objectify .
Natürlich ist eine dritte Option, wenn Sie eine konkrete Darstellung der XML-Datei (mit ElementTree oder lxml) verwenden, können Sie ein eigenes benutzerdefiniertes Modell erstellen. lxml.html ist ein Beispiel dafür und erweitert die Basisschnittstelle von lxml um einige HTML-spezifische Funktionen.
Ich habe am einfachsten gehört ElementTree , obwohl ich selten mit XML und mir arbeite kann nichts aus Erfahrung sagen.
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. Im Mit anderen Worten, es kann ein Python konvertieren Objekt in XML und auch, das konvertieren XML zurück in das ursprüngliche Python Objekt.
Ich verwende (und mag) PyRXP, das ein Tupel erstellt, das aus dem XML-Dokument erstellt wurde.
Das Hauptproblem mit einem geraden XML - & gt; Python-Objekt-Struktur ist, dass es kein Python-Analog für eine attributierte Liste gibt - das heißt, eine Liste mit Elementen, die zufällig auch Attribute haben. Wenn Sie möchten, ist es gleichzeitig eine Liste und ein Wörterbuch.
Ich parse das Ergebnis von PyRXP und erstelle die Liste / das Wörterbuch abhängig von der Struktur - das XML, mit dem ich es zu tun habe, ist entweder Listen- oder Attribut-basiert, niemals beides. (Ich verwende Daten von einer bekannten Quelle).
Python hat Pickle- und cPickle-Module für die Python-Objektserialisierung. Beide Module bieten Funktionen zum Serialisieren / Deserialisieren der Python-Objekthierarchie für die Konvertierung in / aus einem Byte-Stream:
Folgendes bietet eine ähnliche Schnittstelle: pickle (), unpickle () für die Serialisierung von / nach XML
Ich hatte viel Glück mit Wai Yip Tungs xml2obj-Funktion hier:
Es sind ~ 84 Zeilen Code. Es ist native und reine Python; Verwenden von Bibliotheken xml.sax und re (regulärer Ausdruck). Sie übergeben es einfach XML und erhalten Ihr Objekt zurück.