Получение данных из XML.
У меня есть XML-файл, через который я должен получить XML-документ. Ниже приведен XML-документ, который у меня есть.
-<orcid-message>
-<orcid-profile type="user">
-<orcid-activities>
-<orcid-works>
-<orcid-work put-code="23938140" visibility="public">
-<work-contributors>
-<contributor>
-<credit-name visibility="public">Tania Maes</credit-name>
-<contributor>
-<credit-name visibility="public">Francisco Avila Cobos</credit-name>
-<contributor>
-<credit-name visibility="public">Franco Liala Manus</credit-name>
Я хочу получить имя участника: я уже пробовал:
contributors_name = (doc['orcid-message']['orcid-profile']
['orcid-activities']['orcid-works']
['orcid-work']['work-contributors']
['contributor']['credit-name'] )
print(contributors_name)
Пожалуйста, скажите мне, где я иду не так. Спасибо.
1 ответ
"
TypeError: list indices must be integers, not str
: Я получаю эту ошибку
Сообщение об ошибке предполагает, что проблема была из-за XML, содержащего несколько contributor
элементы, следовательно, ваш код до ['contributor']
part вернет список, который в свою очередь не может быть доступен напрямую по ключу (т.е. ['credit-name']
) как словарь. Вам нужно выбрать один элемент в списке, из которого вы хотите получить credit-name
Например, из первого пункта:
contributors = doc['orcid-message']['orcid-profile'] \
['orcid-activities']['orcid-works'] \
['orcid-work']['work-contributors'] \
['contributor']
contributor_name = contributors[0]['credit-name']
Или вы можете использовать понимание списка, чтобы получить credit-name
от всех участников:
contributors_name = [contrib['credit-name']['#text'] for contrib in contributors]
print(contributors_name)
выход:
[u'Tania Maes', u'Francisco Avila Cobos', u'Franco Liala Manus']