Dies ist mein XML -Beispiel. In Wirklichkeit habe ich mehrere "Entität", die eine Datenzeile im gewünschten Ergebnis darstellen. Um Platz zu sparen, habe ich hier nur eine Instanz der "Entität" eingefügt: < / 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 l i e n t _ t y p e
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
Die Elemente in „key“ (oder in „AttributeLogicalName“) sollten die Header sein. Der „Wert“/„Wert“ sollte die tatsächlichen Daten sein. Dies ist das gewünschte Ergebnis (erste Zeile).

Da die Daten sehr verschachtelt sind, habe ich es mit xml.etree versucht, kam aber nicht weit, da ich nicht sicher bin, wie ich hier vorgehen soll:
Code: Select all
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}')