You need to enable JavaScript to run this app. Python中使用ElementTree如何获取XML嵌套元素的指定属性值
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用ElementTree如何获取XML嵌套元素的指定属性值

精准提取嵌套XML节点指定属性的实现方式

无需通过全量递归遍历所有节点的方式获取属性,直接借助ElementTree内置的节点路径匹配能力,定位目标节点后读取对应属性即可完成操作。

操作思路

  • 全量递归的root.iter()方法会无差别扫描XML所有层级的子节点,输出全部节点的标签与属性,不符合精准定位的需求
  • 改用find()/findall()方法按照XML的层级路径定向匹配目标节点:
    • find('相对节点路径'):返回路径匹配的第一个节点对象
    • findall('相对节点路径'):返回路径匹配的所有节点对象组成的列表
  • 定位到目标节点后,调用节点对象的.get('属性名')方法读取属性值:相比直接访问节点对象.attrib['属性名']的写法,该方法支持自定义默认返回值,可避免属性不存在时触发KeyError异常

代码示例

以提取SCHOOL节点下的NAME属性值为例:

import xml.etree.ElementTree as ET

# 解析XML文件
parsed_xml = ET.parse('test.xml')
root = parsed_xml.getroot()

# 按节点层级定位SCHOOL节点(SCHOOL为根节点的直接子节点)
school_node = root.find('SCHOOL')
# 读取SCHOOL节点的NAME属性值
school_name = school_node.get('NAME')

print(school_name)  # 输出结果:DPS

深层嵌套节点的匹配方法

如果需要提取多层嵌套下的节点属性(比如路径为根节点 > MED > PATIENT的PATIENT节点的ID属性),仅需要在路径参数中写全层级关系,不需要逐节点跳转遍历:

# 定位MED节点下属的PATIENT节点
patient_node = root.find('MED/PATIENT')
# 读取PATIENT节点的ID属性
patient_id = patient_node.get('ID')

print(patient_id)  # 输出结果:10101022

注意要点

  • 若XML文件存在命名空间,需要在路径匹配规则中显式包含命名空间标识,否则无法正常定位节点
  • 当目标节点不存在时,find()方法会返回None,建议在读取属性前增加空值判断,避免触发空对象操作异常

内容的提问来源于stack exchange,提问作者Bogota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 01:54:06