如何解析XML文件并层级显示标签与对应值
XML层级遍历与缩进输出解决方案
需求说明
遍历studentinfo.xml文件,输出所有层级标签(含子标签)及其对应值,按层级缩进显示。
示例XML(studentinfo.xml)
<students> <student id="1"> <name>张三</name> <age>20</age> <courses> <course>数学</course> <course>英语</course> </courses> </student> <student id="2"> <name>李四</name> <age>21</age> </student> </students>
期望输出格式
students student (id="1") name: 张三 age: 20 courses course: 数学 course: 英语 student (id="2") name: 李四 age: 21
问题分析
原代码无法实现层级缩进及完整标签信息输出,核心问题在于未递归处理子节点、未跟踪层级深度、未处理标签属性。
可行Python解决方案
使用xml.etree.ElementTree库,通过递归函数遍历节点,根据层级深度添加缩进,同时输出标签名、属性及文本值:
import xml.etree.ElementTree as ET def print_xml_elements(element, indent_level=0): # 生成对应层级的缩进字符串 indent = " " * indent_level # 拼接标签属性字符串 attr_str = "" if element.attrib: attr_pairs = [f'{k}="{v}"' for k, v in element.attrib.items()] attr_str = f" ({', '.join(attr_pairs)})" # 打印当前标签(含属性) print(f"{indent}{element.tag}{attr_str}") # 打印节点文本值(仅保留非空白内容) text = element.text.strip() if element.text else "" if text: print(f"{indent} {element.tag}: {text}") # 递归处理所有子节点 for child in element: print_xml_elements(child, indent_level + 1) # 加载并解析XML文件 tree = ET.parse('studentinfo.xml') root = tree.getroot() # 启动遍历输出 print_xml_elements(root)
代码说明
- 递归遍历逻辑:通过
print_xml_elements函数递归处理每个节点的子节点,indent_level参数跟踪当前层级,生成对应缩进。 - 属性处理:提取节点的属性集合,格式化为
(key="value")的形式追加到标签名后。 - 文本值过滤:仅当节点存在非空白文本时,输出标签与对应值的映射关系。
- 缩进控制:用
" " * indent_level生成层级缩进,保证输出结构清晰直观。
内容的提问来源于stack exchange,提问作者PickleRick
相关产品推荐
相关产品推荐

