在Python中读取XML节点内容最常用的方式是使用标准库中的xml.etree.ElementTree模块,该模块提供了简洁的API,能够高效解析XML文档并提取对应节点的内容。下面通过具体的实战案例逐步讲解不同场景下的XML节点读取方法。

基础XML节点读取方法
首先准备一个简单的XML示例文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<user_info>
<user>
<name>张三</name>
<age>25</age>
<city>北京</city>
</user>
</user_info>
使用ElementTree读取单个节点内容的代码如下:
import xml.etree.ElementTree as ET
# 解析XML文件
tree = ET.parse('user_info.xml')
# 获取根节点
root = tree.getroot()
# 读取user下的name节点内容
name_node = root.find('user/name')
if name_node is not None:
print(f"用户姓名:{name_node.text}")
# 读取age节点内容
age_node = root.find('user/age')
if age_node is not None:
print(f"用户年龄:{age_node.text}")
运行上述代码会输出:
用户姓名:张三 用户年龄:25
读取多个同名节点内容
如果XML中存在多个同名的节点,比如多个user节点,就需要使用findall方法遍历所有节点,示例XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<user_list>
<user>
<name>张三</name>
<age>25</age>
</user>
<user>
<name>李四</name>
<age>28</age>
</user>
</user_list>
读取所有user节点下name内容的代码:
import xml.etree.ElementTree as ET
tree = ET.parse('user_list.xml')
root = tree.getroot()
# 获取所有user节点
user_nodes = root.findall('user')
for user in user_nodes:
# 读取每个user下的name节点内容
name_node = user.find('name')
if name_node is not None:
print(f"用户姓名:{name_node.text}")
# 读取age节点内容
age_node = user.find('age')
if age_node is not None:
print(f"用户年龄:{age_node.text}")
print("-" * 20)
运行结果如下:
用户姓名:张三 用户年龄:25 -------------------- 用户姓名:李四 用户年龄:28 --------------------
读取带属性节点的内容
很多XML节点会带有属性,比如下面的示例,user节点带有id属性,同时包含子节点内容:
<?xml version="1.0" encoding="UTF-8"?>
<user_info>
<user id="1001">
<name>张三</name>
<score>95</score>
</user>
</user_info>
读取节点属性和子节点内容的代码如下:
import xml.etree.ElementTree as ET
tree = ET.parse('user_with_attr.xml')
root = tree.getroot()
user_node = root.find('user')
# 读取节点属性
user_id = user_node.get('id')
print(f"用户ID:{user_id}")
# 读取子节点内容
name_node = user_node.find('name')
score_node = user_node.find('score')
print(f"用户姓名:{name_node.text}")
print(f"用户分数:{score_node.text}")
运行输出:
用户ID:1001 用户姓名:张三 用户分数:95
常见问题说明
- 如果XML文件路径不正确,
ET.parse会抛出FileNotFoundError,需要提前确认文件路径是否正确。 - 如果查找的节点不存在,
find方法会返回None,直接调用text属性会抛出AttributeError,建议先判断节点是否为空。 - 如果XML中包含命名空间,需要在节点名称前加上命名空间前缀,否则会查找不到对应节点。
使用ElementTree模块处理XML时,不需要额外安装依赖,适合大多数常规XML读取场景,如果是处理超大XML文件,可以考虑使用iterparse方法逐行解析,避免占用过多内存。
PythonXML节点读取ElementTree修改时间:2026-07-24 05:42:23