答案:使用xml.etree.ElementTree模块可高效遍历XML树。首先通过ET.parse()加载XML并获取根节点,然后利用递归函数、iter()方法或逐层循环遍历所有节点;其中iter()支持过滤特定标签,findall()和find()可用于提取指定元素的属性与文本内容,适用于不同结构场景。

python遍历XML树的所有节点
在Python中处理XML数据时,经常需要遍历整个XML树,访问每一个节点和子节点。最常用的方法是使用内置的 xml.etree.ElementTree 模块。它轻量、易用,并能高效地解析和操作XML结构。
1. 基本XML结构示例
假设我们有如下XML文件(命名为 example.xml):
<?xml version="1.0"?> <root> <person id="1"> <name>Alice</name> <age>25</age> <city>Beijing</city> </person> <person id="2"> <name>Bob</name> <age>30</age> <city>Shanghai</city> </person> <info> <total>2 people</total> </info> </root>
2. 使用ElementTree解析XML
先加载XML文件并获取根节点:
立即学习“Python免费学习笔记(深入)”;
import xml.etree.ElementTree as ET
tree = ET.parse(‘example.xml’) root = tree.getroot()
此时 root 就是XML树的根节点,我们可以从它开始遍历所有子节点。
3. 遍历所有节点的几种方法
方法一:递归遍历所有节点
通过递归函数访问每个节点及其子节点:
def traverse_tree(node): print(f’标签: {node.tag}, 文本: {node.text.strip() if node.text else “”}, 属性: {node.attrib}’) for child in node: traverse_tree(child)
调用
traverse_tree(root)
输出会显示每个节点的标签名、文本内容(去除空格)和属性字典。
方法二:使用iter()方法遍历指定标签或所有节点iter() 方法可以遍历所有后代节点,支持过滤标签名。
# 遍历所有节点 for elem in root.iter(): print(f'{elem.tag}: {elem.text.strip() if elem.text else “”}’)
或只遍历特定标签,如所有 ‘name’ 节点
for name_elem in root.iter(‘name’): print(f’Name: {name_elem.text}’)
这种方法更简洁,适合快速提取某一类信息。
方法三:逐层遍历(适用于结构清晰的XML)
如果知道层级结构,可以直接用循环访问子节点:
for child in root: print(f’父节点: {child.tag}’) for sub_child in child: print(f’ 子节点: {sub_child.tag} = {sub_child.text}’)
这种方式适合处理格式固定的XML,比如配置文件或标准数据交换格式。
4. 获取节点详细信息
在遍历时,常需提取以下信息:
- 标签名:
node.tag - 文本内容:
node.text(注意可能为None) - 属性:
node.attrib(返回字典) - 子节点数量:
len(node)
例如打印每个 person 的ID和姓名:
for person in root.findall(‘person’): pid = person.get(‘id’) name = person.find(‘name’).text print(f’ID: {pid}, Name: {name}’)
基本上就这些。掌握这几种方式后,就能灵活应对各种XML遍历需求。


