Когда вы запускаете for child in root:
, тогда эта l oop повторяет только по прямым потомкам FullReport , в вашем случае: фирма , reportDate и комнаты , поэтому у нее нет шансов попасть в комнату , которая расположена на шаг ниже.
Из вашего кода (первый l oop) Я вижу, что на самом деле вас интересуют прямые потомки FullReport / rooms / room .
Чтобы напечатать их имена тегов и текстовое содержимое, вы можете запустить, например:
for child in root.iter('room'):
for step_child in child:
print(f'{step_child.tag:20} {step_child.text}')
Для вашего примера ввода результат будет следующим:
roomID PCHAT-0x0000000000000637
roomTitle FX - WBB - CTON
description global chat
creationDate None
removalDate None
lastActivityDate 02/07/2020 12:26:24
status Active
membership Bilateral
isAnonymous false
hasActiveAdmins true
activeUserCount 17
distinctFirmsInRoom 2
isInternalOnly false
isIncognitoForum false
А что касается вашего последнего задания, вы можете выполнить:
rows = []
for child in root.iter('rooms'):
roomId, roomTitle = 'id', 'ttl'
for it in child:
if it.tag == 'room':
roomId = it.findtext('roomID')
roomTitle = it.findtext('roomTitle')
elif it.tag == 'users':
rows.append([roomId, roomTitle, it.findtext('uuid'), it.findtext('bbgEmail'),
it.findtext('fullName'), it.findtext('firmName')])
df = pd.DataFrame(rows, columns=['roomId', 'roomTitle', 'uuid', 'bbgEmail',
'fullName', 'firmName'])
Код выше исходя из предположения, что элемент room появляется первым, а после них идут элементы users .
И добавьте код, касающийся любых дополнительных столбцов, не показанных в вашем сообщении.