Ниже приведен общий подход к сбору данных.
Идея состоит в том, чтобы пометить «специальные» теги (те, которые нам нужны для использования значения атрибута)
Я пропускаю генерацию CSV, потому что ваша основная задача заключалась в том, как извлечь данные из XML.
import xml.etree.ElementTree as ET
ATTRIBUTE_BASED_ELEMENTS = ['ionospheretrace', 'vperiod', 'groundtrace']
tree = ET.parse('56116141.xml')
root = tree.getroot()
data = []
for frame in root.findall('.//frame'):
one_frame = []
for child in list(frame):
if child.tag in ATTRIBUTE_BASED_ELEMENTS:
one_frame.append(child.attrib['delaytime'])
else:
one_frame.append(child.text)
data.append(one_frame)
for frame in data:
print(frame)
56116141.xml
<?xml version="1.0" encoding="UTF-8"?>
<orbit id="14737">
<frame>
<time>2015-08-15T05:28:39.014</time>
<sza>113.48 deg</sza>
<alt>1552 km</alt>
<lat>-66.96 deg</lat>
<lon>196.11 deg</lon>
<x>-0.58 Rm</x>
<rho>1.33 Rm</rho>
<hperiod>0</hperiod>
<hperiodquality>0</hperiodquality>
<vperiod delaytime="167.443 μs">0</vperiod>
<vperiodquality>0</vperiodquality>
<cutoff>0</cutoff>
<ionospheretrace delaytime="167.443 μs"/>
<maxfreqquality>0</maxfreqquality>
<groundtrace delaytime="167.443 μs"/>
</frame>
<frame>
<time>2016-08-15T05:28:39.014</time>
<sza>113.42 deg</sza>
<alt>1553 km</alt>
<lat>-66.16 deg</lat>
<lon>196.41 deg</lon>
<x>-0.56 Rm</x>
<rho>1.39 Rm</rho>
<hperiod>1</hperiod>
<hperiodquality>1</hperiodquality>
<vperiod delaytime="107.443 μs">0</vperiod>
<vperiodquality>1</vperiodquality>
<cutoff>1</cutoff>
<ionospheretrace delaytime="167.343 μs"/>
<maxfreqquality>1</maxfreqquality>
<groundtrace delaytime="967.443 μs"/>
</frame>
</orbit>
выход
['2015-08-15T05:28:39.014', '113.48 deg', '1552 km', '-66.96 deg', '196.11 deg', '-0.58 Rm', '1.33 Rm', '0', '0', '167.443 μs', '0', '0', '167.443 μs', '0', '167.443 μs']
['2016-08-15T05:28:39.014', '113.42 deg', '1553 km', '-66.16 deg', '196.41 deg', '-0.56 Rm', '1.39 Rm', '1', '1', '107.443 μs', '1', '1', '167.343 μs', '1', '967.443 μs']