2016-07-17 5 views
-1

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) 

을 가르쳐주세요. 고맙습니다.

+0

변수 doc''무엇입니까? 어떻게 채웠습니까? – har07

+0

doc = xmltodict.parse (fd.read()) 이고 fd는 xml 문서입니다 – user3419487

+0

그리고 현재 코드의 문제점은 무엇입니까? 아무것도 인쇄되지 않거나 어떤 예외가 발생합니까? – har07

답변

0

" TypeError: list indices must be integers, not str : I get this error"

오류 메시지가 문제가 다시 키에 의해 직접 액세스 할 수 없습니다 목록을 반환합니다 ['contributor'] 부분에 따라서 코드까지, 여러 contributor 요소를 포함하는 XML 때문 제안 (즉 ['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'] 
+0

나는 여전히 같은 오류가 발생합니다. 기여자 = doc [ 'orcid-message'] [ 'orcid-profile'] [ 'orcid-works'] [ 'orcid-works'] [ 'orcid-work'] [ 'work-contributors'] [ '기부자']. 동일한 오류가 발생합니다. – user3419487

+0

실제 XML에 'contributor'가 아닌 동일한 이름의 여러 요소가 포함되어 있으며 주석의 코드에 언급되어 있습니까? – har07

+0

예, 포함되어 있습니다. E-tree lib를 사용해야 할 수도 있습니다. lib는 출력을 얻기 위해 사용 했습니까? – user3419487