Это мой образец XML. На самом деле у меня есть несколько стеков «Entity», которые представляют одну строку данных в желаемом результате. Чтобы сэкономить место, я в с т а в и л с ю д а т о л ь к о о д и н э к з е м п л я р « E n t i t y » : < / p > < b r / > < c o d e > & l t ; E n t i t y C o l l e c t i o n & g t ; < b r / > < b r / > & l t ; E n t i t i e s & g t ; < b r / > < b r / > & l t ; E n t i t y & g t ; < b r / > < b r / > & l t ; A t t r i b u t e s & g t ; < b r / > < b r / > & l t ; K e y V a l u e P a i r O f s t r i n g a n y T y p e & g t ; < b r / > < b r / > & l t ; k e y & g t ; c l i e n t _ n u m b e r & l t ; / k e y & g t ; < b r / > < b r / > & l t ; v a l u e t y p e = & q u o t ; b : s t r i n g & q u o t ; & g t ; A B C 1 2 3 3 4 5 & l t ; / v a l u e & g t ; < b r / > < b r / > & l t ; / K e y V a l u e P a i r O f s t r i n g a n y T y p e & g t ; < b r / > < b r / > & l t ; K e y V a l u e P a i r O f s t r i n g a n y T y p e & g t ; < b r / > < b r / > & l t ; k e y & g t ; m y _ d a t a . c lient_type
my_type
my_data1
true
123
345
my_data.status
status
my_data1
true
123
67
my_data.date
date
my_data1
true
89
2024-01-01
my_data.country
country
my_data1
true
123
456
client_code
some_code456
my_data.my_data1id
my_data1id
my_data1
true
13
some_code123
my_data.client_type
client123
my_data.status
OK
my_data.country
some_country
some_code456
some-id
ID123
Элементы в ключе (или в AttributeLogicalName) должны быть заголовками. «Значение»/«Значение» должно быть фактическими данными. Это желаемый результат (первая строка).

Поскольку данные очень вложенные, я попробовал использовать xml.etree, но не продвинулся далеко, так как не знал, как действовать здесь:
Код: Выделить всё
for _, elem in ET.iterparse(my_xml):
if len(elem) == 0:
print(f'{elem.tag} {elem.attrib} text={elem.text}')
else:
print(f'{elem.tag} {elem.attrib}')
Подробнее здесь: https://stackoverflow.com/questions/789 ... -dataframe