5 ответов:
здесь
huTools.structured.dict2xmlкоторый пытается быть совместимым сsimplejsonв духе. Вы можете дать ему подсказки, как обернуть вложенные подструктуры. Проверьте документацию дляhuTools.structured.dict2etвозвращаетElementTreeобъекты вместо этого, если строки, возвращаемыеdict2xml.>>> data = {"kommiauftragsnr":2103839, "anliefertermin":"2009-11-25", "prioritaet": 7, ... "ort": u"Hücksenwagen", ... "positionen": [{"menge": 12, "artnr": "14640/XL", "posnr": 1},], ... "versandeinweisungen": [{"guid": "2103839-XalE", "bezeichner": "avisierung48h", ... "anweisung": "48h vor Anlieferung unter 0900-LOGISTIK avisieren"}, ... ]} >>> print ET.tostring(dict2et(data, 'kommiauftrag', ... listnames={'positionen': 'position', 'versandeinweisungen': 'versandeinweisung'})) '''<kommiauftrag> <anliefertermin>2009-11-25</anliefertermin> <positionen> <position> <posnr>1</posnr> <menge>12</menge> <artnr>14640/XL</artnr> </position> </positionen> <ort>Hücksenwagen</ort> <versandeinweisungen> <versandeinweisung> <bezeichner>avisierung48h</bezeichner> <anweisung>48h vor Anlieferung unter 0900-LOGISTIK avisieren</anweisung> <guid>2103839-XalE</guid> </versandeinweisung> </versandeinweisungen> <prioritaet>7</prioritaet> <kommiauftragsnr>2103839</kommiauftragsnr> </kommiauftrag>'''
попробуйте этот. только проблема я не использую атрибуты (потому что они мне не нравятся)
dict2xml ВКЛ pynuggets.wordpress.com
dict2xml на activestatefrom xml.dom.minidom import Document import copy class dict2xml(object): doc = Document() def __init__(self, structure): if len(structure) == 1: rootName = str(structure.keys()[0]) self.root = self.doc.createElement(rootName) self.doc.appendChild(self.root) self.build(self.root, structure[rootName]) def build(self, father, structure): if type(structure) == dict: for k in structure: tag = self.doc.createElement(k) father.appendChild(tag) self.build(tag, structure[k]) elif type(structure) == list: grandFather = father.parentNode tagName = father.tagName grandFather.removeChild(father) for l in structure: tag = self.doc.createElement(tagName) self.build(tag, l) grandFather.appendChild(tag) else: data = str(structure) tag = self.doc.createTextNode(data) father.appendChild(tag) def display(self): print self.doc.toprettyxml(indent=" ") if __name__ == '__main__': example = {'auftrag':{"kommiauftragsnr":2103839, "anliefertermin":"2009-11-25", "prioritaet": 7,"ort": u"Huecksenwagen","positionen": [{"menge": 12, "artnr": "14640/XL", "posnr": 1},],"versandeinweisungen": [{"guid": "2103839-XalE", "bezeichner": "avisierung48h","anweisung": "48h vor Anlieferung unter 0900-LOGISTIK avisieren"},]}} xml = dict2xml(example) xml.display()
Я написал простую функцию, которая сериализует словари в xml (до 30 строк).
использование:
mydict = { 'name': 'The Andersson\'s', 'size': 4, 'children': { 'total-age': 62, 'child': [ { 'name': 'Tom', 'sex': 'male', }, { 'name': 'Betty', 'sex': 'female', } ] }, } print(dict2xml(mydict, 'family'))результат:
<family name="The Andersson's" size="4"> <children total-age="62"> <child name="Tom" sex="male"/> <child name="Betty" sex="female"/> </children> </family>полный источник (включая пример) можно найти на https://gist.github.com/reimund/5435343/
Примечание: эта функция будет сериализовать словарные статьи как атрибуты, а не текстовые узлы. Изменить его для поддержки текста было бы очень легко.
большинство объектов в Python представлены как дикты внизу:
>>> class Fred(object) : ... def __init__(self, n) : self.n = n ... >>> a = Fred(100) >>> print a.__dict__ {'n': 100}Так что это похоже на вопрос, как конвертировать dicts в XML. Существуют инструменты для преобразования dict в / из XML по адресу:
вот простой пример:
>>> 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>на веб-сайте есть много документации, показывающей примеры:
трудно преобразование "точно" между dicts и XML: что такое список? Что вы делаете с атрибутами? Как вы справляетесь с цифровыми клавишами? Многие из этих вопросов были решены и обсуждаются в документации XML tools (выше).
скорость имеет значение для вас? Или простота использования имеет значение? Существует чистый модуль C++ (все написано на C++), чистый модуль Python (все написано на Python) и модуль расширения Python C (написанный на C++, но завернутый так, чтобы Python мог его вызвать). C++ и Python Модуль расширения C на порядок быстрее, но, конечно, требует компиляции, чтобы начать работу. Модуль Python должен просто работать, но медленнее:
Comments