Получение данных из 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']
Другие вопросы по тегам