Как преобразовать XML в Dict

Я хочу найти отличное решение для преобразования XML в dict и наоборот в python

Следующий рецепт должен быть полезен:

  • XML как словарь

xmltodict (полное раскрытие: я его написал) делает именно это, следуя этому «стандарту» . Это Expat- based, поэтому он очень быстрый и не требует загрузки всего дерева XML в память.

>>> print(json.dumps(xmltodict.parse(""" ... <mydocument has="an attribute"> ... <and> ... <many>elements</many> ... <many>more elements</many> ... </and> ... <plus a="complex"> ... element as well ... </plus> ... </mydocument> ... """), indent=4)) { "mydocument": { "@has": "an attribute", "and": { "many": [ "elements", "more elements" ] }, "plus": { "@a": "complex", "#text": "element as well" } } } 

При конвертации между словарями XML и Python существуют некоторые интересные угловые случаи, которые делают этот нетривиальный (списки атрибутов? Списки анонимных списков «одиночными» списками? Content eval?): Просмотрите этот документ из дистрибутива PicklingTools: XML to Конверсии Dict : http://www.picklingtools.com

Документы обсуждают, как это сделать, но вот простой пример. В файле с именем «example.xml» мы добавим следующий XML:

 <top> <a>1</a> <b>2.2</b> <c>three</c> </top> 

Чтобы обработать этот файл и превратить его в словарь:

 >>> from xmlloader import * >>> example = file('example.xml', 'r') >>> xl = StreamXMLLoader(example, 0) # 0 = All defaults on options >>> result = xl.expectXML() >>> print result {'top': {'a': '1', 'c': 'three', 'b': '2.2'}} 

Я думаю, что лучший способ будет сворачивать ваши собственные, чтобы удовлетворить ваши потребности. Получите lxml , прочитайте в документах, и вам должно быть хорошо идти. Если у вас есть сомнения, вернитесь назад 🙂