使用ElementTree.fromstring()报错:'Element'对象无getroot属性
解决AttributeError: 'Element' object has no attribute 'getroot'问题
嘿,这个问题我之前踩过同款坑!咱们先把报错的根源理清楚:
你用ET.parse()处理XML时,它返回的是ElementTree对象,这个对象确实自带getroot()方法用来获取XML的根节点。但ET.fromstring()的逻辑完全不一样——它直接把XML字符串解析成根Element节点本身,根本不需要再调用getroot(),这就是你触发错误的核心原因!
正确用法对比
- 用
parse()处理本地XML文件的正确写法:
import xml.etree.ElementTree as ET # parse返回ElementTree对象,需要通过getroot()拿到根节点 tree = ET.parse("your_xml_file.xml") root = tree.getroot()
- 用
fromstring()处理XML字符串的正确写法:
import xml.etree.ElementTree as ET xml_str = "<root><product>apple</product></root>" # fromstring直接返回根Element节点,直接使用即可 root = ET.fromstring(xml_str) # 直接对root进行操作,比如遍历子节点 for child in root: print(child.tag, child.text)
小技巧排查
如果之后再遇到类似的属性错误,可以先打印变量类型确认:
print(type(root))
如果输出是<class 'xml.etree.ElementTree.Element'>,说明已经拿到根节点了,直接操作就行;要是输出是<class 'xml.etree.ElementTree.ElementTree'>,才需要调用getroot()。
内容的提问来源于stack exchange,提问作者Swagatam Sengupta
相关产品推荐
相关产品推荐

