Die meisten Objekte in Python als dicts unterhalb dargestellt:
>>> class Fred(object) :
... def __init__(self, n) : self.n = n
...
>>> a = Fred(100)
>>> print a.__dict__
{'n': 100}
Das ist also ähnlich wie fragen, wie Dicts in XML konvertiert werden. Es gibt Werkzeuge für die bei dict zu/von XML-Konvertierung:
http://www.picklingtools.com
Hier ist ein einfaches Beispiel:
>>> import xmltools
>>> d = {'a':1, 'b':2.2, 'c':'three' }
>>> xx = xmltools.WriteToXMLString(d)
>>> print xx
<?xml version="1.0" encoding="UTF-8"?>
<top>
<a>1</a>
<b>2.2</b>
<c>three</c>
</top>
auf der Website eine Vielzahl von Dokumentationen Es gibt Beispiele, die zeigen:
XML Tools Manual
Es ist schwierig, "genau" zwischen dicts und XML zu konvertieren: Was ist a Liste? Was machst du mit Attributen? Wie gehen Sie mit numerischen Schlüsseln um? Viele dieser Probleme wurden behoben und sind in der XML-Tools-Dokumentation (oben) diskutiert.
Ist Ihnen die Geschwindigkeit wichtig? Oder ist Benutzerfreundlichkeit von Bedeutung? Es gibt ein reines C++ - Modul (alles in C++ geschrieben), ein reines Python-Modul (alles in Python geschrieben) und ein Python-C-Erweiterungsmodul (in C++ geschrieben, aber so verpackt, dass Python es aufrufen kann). Das C++ - und das Python C Extension-Modul sind um Größenordnungen schneller, aber natürlich müssen sie kompiliert werden. Das Python-Modul sollte einfach funktionieren, ist aber langsamer:
> http://code.activestate.com/recipes/415983/ Diese Datei wird nicht in XML umgewandelt, sondern nur im Marshal-Format. Und ich mag sys.exit auch nicht bei Exception. > http://sourceforge.net/projects/pyxser/ Dies ist nicht BSD. Sorry, ich habe vergessen zu erwähnen, ich suche nach Python-Modul oder BSD, damit ich mit meiner BSD-Software verteilen kann. Die letzten 2 - für Webservices, bin ich auf der Suche nach regulären XML-Serializator. – zinovii
zdmytriv: Sie können eine LGPL-Bibliothek mit Ihrem BSD-Code ohne Verbindlichkeiten verteilen. – nosklo
@nosklo: Ich wusste nicht, dass du das kannst. Jetzt weiß ich, danke. – zinovii