konvertieren von xml-python-dict
Ich versuche, mich ein dict-Klasse zur Verarbeitung eines xml-aber nicht weiterkommen, habe ich wirklich die Ideen ausgehen. Wenn jemand könnte die Anleitung zu diesem Thema wäre toll.
code so weit entwickelt:
class XMLResponse(dict):
def __init__(self, xml):
self.result = True
self.message = ''
pass
def __setattr__(self, name, val):
self[name] = val
def __getattr__(self, name):
if name in self:
return self[name]
return None
message="<?xml version="1.0"?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>"
XMLResponse(message)
Es scheint, dass diese Frage beantwortet wurde, bevor: stackoverflow.com/questions/2148119/...
Was ist Ihre gewünschte Ergebnis?
Ich verstehe nicht deine Idee Freund
finden Sie die Lösung, es vor, aber ich hatte keine positive
so etwas wie dieses: {"":"Tove", "from":"Jani", "Position":"Erinnerung", "body":"vergiss mich nicht an diesem Wochenende!"}
Was ist Ihre gewünschte Ergebnis?
Ich verstehe nicht deine Idee Freund
finden Sie die Lösung, es vor, aber ich hatte keine positive
so etwas wie dieses: {"":"Tove", "from":"Jani", "Position":"Erinnerung", "body":"vergiss mich nicht an diesem Wochenende!"}
InformationsquelleAutor Alfredo | 2013-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Gebrauch machen von
xmltodict
Modul:ergibt ein
OrderedDict
:die umgewandelt werden können, dict, wenn die Reihenfolge egal:
Drucke:
Wenn Sie sehen wollen, wie es zu tun, ohne ein zusätzliches Modul, warum nicht einen Blick auf die Quelle für
xmltodict
? Es ist ein paar hundert Zeilen sauber, gut kommentiert Python-code. Und es ist mit Sicherheit besser als jede quick & dirty hack, jemand kommt mit für eine Antwort auf SO.war nur zu sehen wie Sie sich entwickeln, das Modul, vielleicht ist es ein guter Weg, um zu starten.
Angesichts der Lizenzierung und dev Geschichte der Modul, wahrscheinlich der beste Weg zu beginnen ist, nur Gabel und spielen mit Ihrer Gabel. Auf diese Weise, wenn Sie mit etwas kommen, fehlte in der ursprünglichen, und, die Sie freigeben möchten mit der Welt, können Sie stellen Sie einfach einen pull-request zurück flussaufwärts.
wenn ich einige code entwickelt, für diese habe ich kein problem, Sie teilen keine Informationen mit der community.
InformationsquelleAutor alecxe
Sollten Sie checkout
https://github.com/martinblech/xmltodict
Ich denke, es ist einer der besten standard-Handler für xml dict, die ich gesehen habe.
Aber ich sollte Sie warnen, xml und dict sind absolut nicht kompatibel Datenstrukturen
Die einzige große Ausgabe für einfache Fälle ist, dass die XML-Knoten können Attribute haben als auch sub-Knoten, und Sie haben zu entscheiden, wie Sie zu vertreten.
xmltodict
stellt Attribute als Knoten mit einer@
Präfix auf den Namen, das ist eine Möglichkeit, um das problem zu lösen, aber es gibt auch andere Möglichkeiten—z.B. die, die Sie behandeln können Knoten mit__getitem__
und attrs mit__getattr__
.InformationsquelleAutor dusual
Würden Sie denken, jetzt hätten wir eine gute Antwort auf diesen einen, aber wir offenbar nicht.
Nach der überprüfung halben Dutzend ähnliche Fragen auf stackoverflow, hier ist was für mich gearbeitet:
und dies ist, wie Sie es verwenden:
Hoffe es hilft 🙂
.getroot()
zutree
im Aufruf, wie inetree2dict(tree.getroot())
. Vielleicht deshalb, weil ich Lesen von XML aus einer Datei und nicht aus einem string? In jedem Fall, großartige Antwort.InformationsquelleAutor Fred
Können Sie die lxml-Bibliothek. Konvertieren Sie die Zeichenfolge in ein xml-Objekt mit
objectify.fromstring
und dann schauen die Objekte, die dir Methode. Zum Beispiel:Konvertierung der xml-Objekt dict zurückkehren würde, ein dict:
Den xml-string den ich verwendet ist eine Antwort von paymentech payment-gateway nur zu zeigen, dass eine Reale Welt Beispiel.
Beachten Sie auch, dass das obige Beispiel ist nicht rekursiv, also wenn es dicts innerhalb dicts Sie haben zu tun, einige Rekursion. Finden Sie die rekursive Funktion, die ich schrieb, die Sie verwenden können:
Hier eine Variante, die die Beibehaltung der übergeordneten Schlüssel /element:
Und wenn Sie wollen, liefern nur einen Teilbaum und konvertieren Sie es in dict, können Sie Element.finden() :
Gibt es viele Möglichkeiten, dies zu erreichen, aber dieses ist groß, wenn Sie bereits mit lxml. In diesem Beispiel lxml-3.4.2 verwendet wurde.Prost!
InformationsquelleAutor radtek