【问题标题】:XML Element Tree Python Iterate through child and save each subchild as CSV columnXML Element Tree Python 遍历子元素并将每个子子元素保存为 CSV 列
【发布时间】:2017-11-29 18:09:03
【问题描述】:

我一直在寻找解决我当前问题的方法,但找不到任何可以充分解决它的方法。我正在尝试遍历 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 列中。

在此先感谢您提供的所有建议,这是我正在从事的一个巨大项目的最后一部分,我觉得我已经用尽了所有可能找到的解决方案。

【问题讨论】:

    标签: python xml python-2.7 xml-parsing elementtree


    【解决方案1】:

    只需添加嵌套的 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'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      相关资源
      最近更新 更多