2017-11-29 9 views
0

현재 모든 문제에 대한 해결책을 찾지 못했지만 문제를 적절히 해결하지 못했습니다. 나는 XML 문서에서 루트 노드의 자식을 반복하고 반복 (예 : 아래의 XML에서 반복하여 COMPANY 및 ROLE의 각 인스턴스를 가져옴) 내의 각 하위 키의 값을 가져 오려고 시도하고 있습니다. 이것은 거대한 프로젝트의 마지막 부분이며 나는 완전히 붙어 있습니다. 모든 도움이 대단히 감사 할 것입니다.XML 요소 트리 파이썬 자식을 반복하고 각 하위 코드를 CSV 열로 저장합니다.

<Personnel Personnel ID = "123"> 
    <First_Name> First </First_Name> 
    <Last_Name> Last </Last_Name> 
    <User_ID> 123 </User_ID> 
    <Date> 2017-01-01 </Date> 
    <INFO> 
     <INFO_1> 
     <PHONE> 555-555-5555 </PHONE> 
     <INFO_2> 
     <EMAIL> [email protected] </EMAIL> 
    </INFO>  
    <LINKS> 
     <LINK COMPANY = "Company 1" ROLE = "Role 1" /> 
     <LINK COMPANY = "Company 2" ROLE = "Role 2" /> 
     <LINK COMPANY = "Company 3" ROLE = "Role 3" /> 
     .... 
     <LINK Company = "Company n" ROLE = "Role n" /> 
    </LINKS> 
    <TAGS> 
     <TAG Term="Tag 1" /> 
     <TAG Term="Tag 2" /> 
     <TAG Term="Tag 3" /> 
     ................... 
     <TAG Term="Tag n" /> 
    </Tags> 
    <Personnel_Field_1> Field 1 </Personnel_Field_1> 
    <Personnel_Field_2> Field 2 </Personnel_Field_2> 

예제 코드 :

for contact in root.findall('Personnel'): 
    Personnel_ID = contact.get('Personnel_ID') 
    contact_info.append(Personnel_ID) 

    First_Name = contact.find('First_Name').text 
    contact_info.append(First_Name) 

    Last_Name = contact.find('Last_Name').text 
    contact_info.append(Last_Name) 

    User = contact.find('User_ID').text 
    contact_info.append(User) 

    Date = contact.find('Date').text 
    contact_info.append(Date) 

    Email = contact.find('.//EMAIL').text 
    contact_info.append(Email) 

    Phone = contact.find('.//PHONE').text 
    contact_info.append(Phone) 

    Personnel_1 = contact.find('Personnel_Field_1').text.encode('utf-8') 
    contact_info.append(Personnel_1) 

    Personnel_2 = contact.find('Personnel_Field_2').text.encode('utf-8') 
    contact_info.append(Personnel_2) 

지금까지 나는 다음과 CSV 열로 저장 당기는에 성공했다 : 직원 ID, 이름, 성, 사용자 ID, 날짜, 이메일, 전화 번호, 인사 1, 인사 2

내가 짚어 놓은 것은 COMPANY와 ROLE을 구문 분석하고 각 용어를 구문 분석하는 기능입니다. 각 회사, 역할 및 태그 값을 자체 열로 저장해야합니다. 누구든지 나를 통해 이러한 요소들을 반복하는 방법을 보여줌으로써 도움을 줄 수 있다면 CSV 컬럼에 저장할 수있을 것입니다.

미리 조언 해 주셔서 감사합니다.이 프로젝트는 내가 연구하고있는 거대한 프로젝트의 마지막 부분이며, 내가 찾은 모든 잠재적 솔루션을 다 써 버린 것처럼 느껴집니다.

답변

1

는 단순히 LINKTAG 아이들을 구문 분석 중첩 된 for 루프를 추가 할 수 있습니다.

for contact in root.findall('Personnel'): 
    ... 
    for link in contact.findall('.//LINK'): 
     contact_info.append(link.get('COMPANY')) 
     contact_info.append(link.get('ROLE')) 

    for tag in contact.findall('.//TAG'): 
     contact_info.append(tag.get('Term'))