簡體   English   中英

XML元素樹Python遍歷子級並將每個子級另存為CSV列

[英]XML Element Tree Python Iterate through child and save each subchild as CSV column

我一直在整個SO中尋找解決我當前問題的方法,但是還沒有找到任何可以解決問題的方法。 我試圖遍歷XML文檔中根節點的子節點,並提取迭代中每個子節點的值(例如,遍歷下面的XML並提取COMPANY和ROLE的每個實例)。 這是一個龐大項目的最后一部分,我完全陷於困境,我們將不勝感激任何幫助。

<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> name@email.com </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列中。

在此先感謝您提供的所有建議,這是我正在進行的一個大型項目的最后一部分,我覺得我已經用盡了所有可能找到的解決方案。

只需添加嵌套的for循環即可解析LINKTAG子級。

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'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM