Я думаю, что ответ, который вы ищете, должен быть структурирован примерно так:
{
'ResponseClass': 'Success',
'Folders': [{
'FolderId': ...
'ChangeKey': ...
}, {
'FolderId': ...
'ChangeKey': ...
}]
}
Я бы также предложил упростить ваш код, чтобы сделать его более читабельным, особенно с помощью вспомогательной функции для извлечения элементов, а такжеудаление количества использованного отступа.
Изменение вашего кода на следующее должно приблизить вас к тому, что вы ищете:
import xml.etree.ElementTree as et
def __parse_createItem_response(xml_response):
response = {}
response_obj = et.XML(xml_response)
body = get_first_element_with_tag(response_obj, '{http://schemas.xmlsoap.org/soap/envelope/}Body')
FindFolderResponse = get_first_element_with_tag(body, '{http://schemas.microsoft.com/exchange/services/2006/messages}FindFolderResponse')
ResponseMessages = get_first_element_with_tag(FindFolderResponse, '{http://schemas.microsoft.com/exchange/services/2006/messages}ResponseMessages')
FindFolderResponseMessage = get_first_element_with_tag(ResponseMessages, '{http://schemas.microsoft.com/exchange/services/2006/messages}FindFolderResponseMessage')
if FindFolderResponseMessage.attrib:
ResponseClass = FindFolderResponseMessage.attrib['ResponseClass']
response['ResponseClass'] = ResponseClass
if response.get('ResponseClass') == 'Success':
RootFolder = get_first_element_with_tag(FindFolderResponseMessage, '{http://schemas.microsoft.com/exchange/services/2006/messages}RootFolder')
Folders = get_first_element_with_tag(RootFolder, '{http://schemas.microsoft.com/exchange/services/2006/types}Folders')
folders = []
for Folder in Folders:
if Folder.tag != '{http://schemas.microsoft.com/exchange/services/2006/types}Folder':
continue
FolderId = get_first_element_with_tag(Folder, '{http://schemas.microsoft.com/exchange/services/2006/types}FolderId')
folder = {
'FolderId': FolderId.attrib['Id']
}
if FolderId.attrib['ChangeKey']:
folder['ChangeKey'] = FolderId.attrib['ChangeKey']
folders.append(folder)
response['Folders'] = folders
elif response.get('ResponseClass') == 'Error':
MessageText = get_first_element_with_tag(FindFolderResponseMessage, '{http://schemas.microsoft.com/exchange/services/2006/messages}MessageText')
if MessageText:
response['MessageText'] = MessageText.text
ResponseCode = get_first_element_with_tag(FindFolderResponseMessage, '{http://schemas.microsoft.com/exchange/services/2006/messages}ResponseCode')
if ResponseCode:
response['ResponseCode'] = ResponseCode.text
return response
def get_first_element_with_tag(parent_element, tag):
for element in parent_element:
if element.tag == tag:
return element