Python怎么遍历XML所有节点和属性

来源:安卓APP网作者:三上悠亚头衔:网络博主
导读:本期聚焦于小伙伴创作的《Python怎么遍历XML所有节点和属性》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python怎么遍历XML所有节点和属性》有用,将其分享出去将是对创作者最好的鼓励。

在Python中处理XML数据时,遍历所有节点和属性是获取完整数据信息的常见需求,使用标准库自带的xml.etree.ElementTree模块就能高效完成这个操作,不需要额外安装第三方依赖。

Python怎么遍历XML所有节点和属性

准备工作

首先我们需要导入对应的模块,同时准备一份测试用的XML数据,方便后续演示遍历逻辑。测试XML内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book category="编程" id="1">
        <title>Python基础教程</title>
        <author>张三</author>
        <price>59.9</price>
    </book>
    <book category="文学" id="2">
        <title>散文精选</title>
        <author>李四</author>
        <price>39.9</price>
    </book>
</bookstore>

遍历XML所有节点的方法

ElementTree模块提供了iter()方法,这个方法可以递归遍历XML树中的所有节点,不需要我们手动写递归逻辑,使用起来非常方便。

基础节点遍历示例

下面的代码演示了如何遍历所有节点并打印节点名称和文本内容:

import xml.etree.ElementTree as ET

# 解析XML内容,这里直接使用上面的测试XML字符串
xml_data = """<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book category="编程" id="1">
        <title>Python基础教程</title>
        <author>张三</author>
        <price>59.9</price>
    </book>
    <book category="文学" id="2">
        <title>散文精选</title>
        <author>李四</author>
        <price>39.9</price>
    </book>
</bookstore>"""

# 从字符串解析XML
root = ET.fromstring(xml_data)

# 使用iter方法遍历所有节点
for node in root.iter():
    print(f"节点名称:{node.tag}")
    # 如果节点有文本内容且不是空白字符,打印文本内容
    if node.text and node.text.strip():
        print(f"节点文本:{node.text.strip()}")
    print("-" * 20)

指定节点类型遍历

如果只需要遍历某一种特定名称的节点,可以给iter()方法传入节点名称作为参数,这样只会返回对应名称的节点:

import xml.etree.ElementTree as ET

xml_data = """<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book category="编程" id="1">
        <title>Python基础教程</title>
        <author>张三</author>
        <price>59.9</price>
    </book>
    <book category="文学" id="2">
        <title>散文精选</title>
        <author>李四</author>
        <price>39.9</price>
    </book>
</bookstore>"""

root = ET.fromstring(xml_data)

# 只遍历book节点
for book_node in root.iter("book"):
    print(f"找到book节点,category属性:{book_node.get('category')}")
    print("-" * 20)

遍历XML所有属性的方法

每个节点对象的attrib属性是一个字典,存储了当前节点的所有属性键值对,我们可以通过遍历这个字典来获取所有属性信息。

遍历单个节点的所有属性

下面的代码演示了如何获取指定节点的所有属性:

import xml.etree.ElementTree as ET

xml_data = """<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book category="编程" id="1">
        <title>Python基础教程</title>
        <author>张三</author>
        <price>59.9</price>
    </book>
</bookstore>"""

root = ET.fromstring(xml_data)
# 获取第一个book节点
book_node = root.find("book")

# 遍历book节点的所有属性
for attr_name, attr_value in book_node.attrib.items():
    print(f"属性名:{attr_name},属性值:{attr_value}")

遍历所有节点的所有属性

结合节点遍历和属性遍历的逻辑,就可以实现遍历XML中所有节点的所有属性:

import xml.etree.ElementTree as ET

xml_data = """<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book category="编程" id="1">
        <title>Python基础教程</title>
        <author>张三</author>
        <price>59.9</price>
    </book>
    <book category="文学" id="2">
        <title>散文精选</title>
        <author>李四</author>
        <price>39.9</price>
    </book>
</bookstore>"""

root = ET.fromstring(xml_data)

# 遍历所有节点
for node in root.iter():
    # 如果节点有属性,打印属性信息
    if node.attrib:
        print(f"节点{node.tag}的属性:")
        for attr_name, attr_value in node.attrib.items():
            print(f"  {attr_name}: {attr_value}")
        print("-" * 20)

完整遍历节点和属性的综合示例

下面的代码把节点遍历和属性遍历结合起来,一次性输出XML中所有节点的名称、文本内容以及对应的属性信息:

import xml.etree.ElementTree as ET

xml_data = """<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book category="编程" id="1">
        <title>Python基础教程</title>
        <author>张三</author>
        <price>59.9</price>
    </book>
    <book category="文学" id="2">
        <title>散文精选</title>
        <author>李四</author>
        <price>39.9</price>
    </book>
</bookstore>"""

root = ET.fromstring(xml_data)

for node in root.iter():
    print(f"节点名称:{node.tag}")
    # 打印节点属性
    if node.attrib:
        print("节点属性:")
        for k, v in node.attrib.items():
            print(f"  {k}: {v}")
    # 打印节点文本
    if node.text and node.text.strip():
        print(f"节点文本:{node.text.strip()}")
    print("=" * 30)

注意事项

  • 如果XML数据存储在文件中,可以使用ET.parse("文件路径")方法解析,然后通过getroot()获取根节点,后续遍历逻辑和字符串解析的方式一致。
  • 节点的text属性返回的是节点标签之间的文本内容,如果标签之间有换行或者空格,可能需要用strip()方法处理后再使用。
  • 如果XML结构非常复杂,包含命名空间,遍历的时候需要注意节点名称会包含命名空间前缀,需要对应处理才能正确匹配节点名称。

PythonXML遍历节点遍历属性ElementTree修改时间:2026-07-20 18:00:39

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。