You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:50:13