Не могу распарсить xml с потощью lxml python?

Добрый день. Не могу сгенерировать нужный словарь

есть xml

<one val='value1'>
	<text> text1 </text>
	<two>
		<text> text two 1</text>
	</two>
	<two>
		<text> text two 2</text>
	</two>
	<two>
		<text> text two 3</text>
	</two>
</one>
<one val='value2'>
	<text> text2 </text>
	<two>
		<text> text two 4</text>
	</two>
	<two>
		<text> text two 5</text>
	</two>
</one>
<one val='value3'>
	<text> text3 </text>
	<two>
		<text> text two 6</text>
	</two>
</one>


Хочу получить из него

[{'one':'text1','val':'value1', 'two': ['text two 1','text two 2','text two 3']},
{'one':'text2','val':'value2', 'two': ['text two 4','text two 5']}
{'one':'text3','val':'value3', 'two': ['text two 6']}
]

Ума не приложу как это сделать с помощью lxml . Пробывал через xpath, но вменяемого ничего не вышло, смог только сделать массивы ['text1','text2','text3'] и ['text two 1','text two 2','text two 3','text two 4','text two 5','text two 6'] ,но понял что структура нужна. Зарнее спасибо
  • Вопрос задан
  • 2935 просмотров
Пригласить эксперта
Ответы на вопрос 2
seriyPS
@seriyPS
Не нужен вам XPath. lxml.de/tutorial.html#elements-are-lists
Делайте итерацию по элементам и рекурсивную функцию (или просто вложенные циклы).
Что плохо - это то, что у вас структура XML неоднозначно соответствует структуре python словарей. Ну и приведённый XML невалидный - нет корневого элемента (или он неполный?).

def to_dicts(element):
  obj = {'tag': element.tag,
        'attrs': element.attrs,
        'childs': [to_dicts(child) for child in element]}
  return obj
Ответ написан
SeriyPS, готовы предложить вам работу на тему Парсинга. Проект большой, интересный и долгосрочный, социально ориентированный и с хорошей кармой. Вначале сдельно, потом по договоренности. Готовы инвестировать в тему 200К и более.
Можете ли поделиться контактами для общения?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы