如何用Python获取XML文件中的属性值而非元素对象
解决Python读取XML节点属性值的问题
场景说明
假设你的XML结构类似:
<root> <vocation name="Warrior" /> <vocation name="Mage" /> <vocation name="Ranger" /> </root>
现有代码运行后输出元素对象(如<Element 'vocation' at ...>),用.text获取属性时触发AttributeError——这是因为.text用于提取节点内部文本内容,而非属性值。
解决方案
方法1:使用Python标准库xml.etree.ElementTree
直接通过元素对象的属性操作方法获取属性值:
方式A:用.get()方法(推荐,属性不存在时返回None,避免报错)
import xml.etree.ElementTree as ET # 解析XML文件 tree = ET.parse("your_file.xml") root = tree.getroot() # 遍历所有vocation节点,提取name属性 for vocation in root.findall("vocation"): print(vocation.get("name"))
方式B:访问attrib字典(属性不存在时会触发KeyError)
import xml.etree.ElementTree as ET tree = ET.parse("your_file.xml") root = tree.getroot() for vocation in root.findall("vocation"): print(vocation.attrib["name"])
方法2:使用lxml库(支持XPath,适合复杂XML查询)
如果需要更灵活的节点查询,可使用lxml:
- 先安装库:
pip install lxml
- 代码示例:
from lxml import etree tree = etree.parse("your_file.xml") # 用XPath直接提取所有vocation节点的name属性 name_list = tree.xpath("//vocation/@name") for name in name_list: print(name)
输出结果
两种方法都会得到你期望的输出:
Warrior Mage Ranger
内容的提问来源于stack exchange,提问作者kojtim kojim
相关产品推荐
相关产品推荐

