В StackOverflow существует множество решений для преобразования XML в словарь Python, но ни один из них не генерирует результат, который я ищу. У меня есть следующий XML:Преобразование XML в словарь в Python с использованием lxml
<?xml version="1.0" encoding="UTF-8"?>
<status xmlns:mystatus="http://localhost/mystatus">
<section1
mystatus:field1="data1"
mystatus:field2="data2" />
<section2
mystatus:lineA="outputA"
mystatus:lineB="outputB" />
</status>
lxml has an elegantly simple solution для преобразования XML в словарь:
def recursive_dict(element):
return element.tag, dict(map(recursive_dict, element)) or element.text
К сожалению, я получаю:
('status', {'section2': None, 'section1': None})
вместо:
('status', {'section2':
{'field1':'data1','field2':'data2'},
'section1':
{'lineA':'outputA','lineB':'outputB'}
})
Я не могу изобразить e, как получить желаемый результат без существенного усложнения функции recursive_dict().
Я не привязан к lxml, и я также прекрасно разбираюсь в другой организации словаря, если он дает мне всю информацию в xml. Благодаря!
Из любопытства, почему вы ожидаете получить атрибуты разделов, но не атрибуты статуса? Какая магия позволяет библиотеке знать, что вы хотите? И ... есть ли какая-то причина, почему содержание разделов - это атрибуты, а не элементы? – GreenAsJade
XML поставляется с источником, который я не контролирую. Мне нужно иметь возможность потреблять его и действовать на нем. Вот почему я сказал, что буду «отлично с другой организацией словаря». Моя цель - получить всю информацию - будь то тег, текст, атрибут, что угодно - в простую структуру, такую как словарь. Никакой «магии» не требуется. Значения «Нет» в порядке. Я просто хочу, чтобы вся информация в захваченном XML. – proximous
Похоже, у вас есть решение, но я просто хочу отметить, что желаемый результат, который вы показали, не показывает _ALL_ полученную информацию. Он показывает атрибуты захваченных секций, но не атрибуты статуса. – GreenAsJade