【问题标题】:Access data in XML tag with python使用python访问XML标签中的数据
【发布时间】:2019-03-17 19:47:19
【问题描述】:

我从数据分析开始,我想解析一个 XML 文件以便分析数据,这是我的 XML 文件的一部分:

<?xml version="1.0" encoding="UTF-8"?>
<SoccerFeed>
  <SoccerDocument>
    <Team>
      <Founded>1919</Founded>
      <Name>Angers</Name>
      <Player uID="p40511">
        <Name>Denis Petric</Name>
        <Position>Goalkeeper</Position>
        <Stat Type="first_name">Denis</Stat>
        <Stat Type="last_name">Petric</Stat>
        <Stat Type="preferred_foot">Left</Stat>
      </Player>
      <Player uID="p119744">
        <Name>Mathieu Michel</Name>
        <Position>Goalkeeper</Position>
        <Stat Type="first_name">Mathieu</Stat>
        <Stat Type="preferred_foot">Right</Stat>
      </Player>
    </Team>
  </SoccerDocument>
</SoccerFeed>

如何访问 Stat 标签中的 preferred_foot ?这是我访问这些数据的python代码:

dom = ElementTree.parse(full_file)
teams = dom.findall('SoccerDocument/Team')
for t in teams:
    team_name = t.find('Name').text
    founded = t.find('Founded').text
    players = t.findall('Player')
    for pl in players:
        player_name = pl.find('Name').text
        player_position = pl.find('Position').text
        preferred_foot = pl.find('Stat[@Type="preferred_foot"]')

【问题讨论】:

标签: python xml parsing


【解决方案1】:

这里是:

这个想法是找到所有类型为prefered_foot的Stat元素

import xml.etree.ElementTree as ET

xml = '''<?xml version="1.0" encoding="UTF-8"?>
<SoccerFeed>
  <SoccerDocument>
    <Team>
      <Founded>1919</Founded>
      <Name>Angers</Name>
      <Player uID="p40511">
        <Name>Denis Petric</Name>
        <Position>Goalkeeper</Position>
        <Stat Type="first_name">Denis</Stat>
        <Stat Type="last_name">Petric</Stat>
        <Stat Type="preferred_foot">Left</Stat>
      </Player>
      <Player uID="p119744">
        <Name>Mathieu Michel</Name>
        <Position>Goalkeeper</Position>
        <Stat Type="first_name">Mathieu</Stat>
        <Stat Type="preferred_foot">Right</Stat>
      </Player>
    </Team>
  </SoccerDocument>
</SoccerFeed>'''

root = ET.fromstring(xml)
prefered_foots = root.findall(".//Stat[@Type='preferred_foot']")
for foot in prefered_foots:
    print(foot.text)

输出

Left
Right

【讨论】:

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