
Hallo Jens. jens schrieb:
Noch ein update:
=========================================================== import sys
t = [ "beispiel", 123, "noch was", {'status':'GM', 'rating':2700}, {'status':'Computer', 'rating':2700}, {'status':'Amateur', 'rating':1400}, { "eins": {"a":1, "b":2}, "zwei": {"c":2, "d":3}, }, ]
def to_xml(data, out, deep=0, **attributes): typ = data.__class__.__name__
attr = [typ] for a in attributes.iteritems(): attr.append('%s="%s"' % a) attr = " ".join(attr)
out.write( "%s<%s>" % ("\t"*deep, attr) )
if isinstance(data, dict): out.write("\n") for k,v in data.iteritems(): to_xml(v, out, deep+1, key=k) out.write("\t"*deep)
elif isinstance(data, list) or \ isinstance(data, tuple): out.write("\n") for e in data: to_xml(e, out, deep+1) out.write("\t"*deep)
else: out.write(repr(data))
Lass mal das repr() weg, dann sehen Strings besser aus. Außerdem solltest du das noch bearbeiten, damit Zeichen wie "<" aus Strings verschwinden. Dafür gibt es im cgi Modul und xml.sax(.saxutils?) Modul Funktionen.
out.write("</%s>\n" % typ)
to_xml(t, out=sys.stdout)
print "-"*79 t = {'foo': {"bar":("jup","jap","schnupp")}} to_xml(t, out=sys.stdout) ===========================================================
Erzeugt das: =========================================================== <list> <str>'beispiel'</str> <int>123</int> <str>'noch was'</str> <dict> <str key="status">'GM'</str> <int key="rating">2700</int> </dict> <dict> <str key="status">'Computer'</str> <int key="rating">2700</int> </dict> <dict> <str key="status">'Amateur'</str> <int key="rating">1400</int> </dict> <dict> <dict key="eins"> <int key="a">1</int> <int key="b">2</int> </dict> <dict key="zwei"> <int key="c">2</int> <int key="d">3</int> </dict> </dict> </list> ------------------------------------------------------------------------------- <dict> <dict key="foo"> <tuple key="bar"> <str>'jup'</str> <str>'jap'</str> <str>'schnupp'</str> </tuple> </dict> </dict> ===========================================================
Beim letzten kann man aber sehen, an <tuple key="bar"> das es so einfach nicht geht...
Versteh ich nicht, für mich sieht das genau so aus, wie es soll: "bar" ist doch der key für das Tuple, oder? Jetzt brauchst du nur noch einen XML Parser (SAX?) und dann kannst du die Struktur Stück für Stück wieder einlesen, indem du die Tag-Namen als Klassen verwendest. Stefan _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de