Python解析XML报错AttributeError: 'NoneType' object has no attribute 'text'
错误原因
你对XML的结构层级理解有误:当前XML的根节点是<file>,根节点下仅存在一个<ALL_INSTANCES>子节点,所有的<instance>数据节点都存放在<ALL_INSTANCES>内部。你直接遍历根节点root时,拿到的第一个元素是<ALL_INSTANCES>,该节点下不存在<ID>子节点,find("ID")会返回None,调用.text自然触发AttributeError。
修复方案
只需将遍历对象修改为<ALL_INSTANCES>下的所有instance节点即可,修改后的完整代码如下:
import xml.etree.ElementTree as Xet import pandas as pd cols = ["ID", "Start", "End", "Player", "Team", "Action","Half","x","y"] rows = [] # 解析XML文件 xmlparse = Xet.parse('Output.xml') root = xmlparse.getroot() # 先定位到ALL_INSTANCES节点,再遍历内部所有instance all_instances = root.find('ALL_INSTANCES') for i in all_instances.findall('instance'): ID = i.find("ID").text Start = i.find("start").text End = i.find("end").text Player= i.find("code").text Team = i.findall("./label[1]/text")[0].text Action = i.findall("./label[2]/text")[0].text Half = i.findall("./label[3]/text")[0].text x = i.find("pos_x").text y = i.find("pos_y").text rows.append({"ID": ID, "Start": Start, "End": End, "Player": Player, "Team": Team, "Action": Action, "Half": Half, "x": x, "y": y}) df = pd.DataFrame(rows, columns=cols) # 输出为CSV,额外加了编码参数避免Excel打开乱码,不需要可删除 df.to_csv('output.csv', index=False, encoding='utf-8-sig')
内容的提问来源于stack exchange,提问作者JayRSP
相关产品推荐
相关产品推荐

