Python ElementTree库XML解析与生成完整指南

橘子海
橘子海
发布时间:2026-10-12| 4人浏览过
原创

本文详解Python中ElementTree库的使用,涵盖从引入Element、ElementTree及SubElement类开始,演示如何读取XML文件并获取根节点。内容包含查找子节点、插入新节点(两种方法对比)、操作属性以及使用indent函数美化XML输出的完整代码示例,帮助开发者高效处理XML数据。

1.引入库

主要涉及三个核心类:ElementTree用于管理整个文档,Element代表单个节点,以及SubElement作为创建子节点的便捷包装类。

from xml.etree.ElementTree import ElementTree
from xml.etree.ElementTree import Element
from xml.etree.ElementTree import SubElement as SE

2.读入并解析

tree = ElementTree(file=xmlfile)
root = tree.getroot()

加载XML文件后,返回的对象类型为ElementTree。要访问XML的根节点,需调用getroot()方法。

XML示例文件:

<item sid='1712' name='大CC'  >
<a id=1></a>
<a id=2></a>
</item>

3.获取子结点

查找Element的所有子结点:

AArry = item.findall('a')

也可使用getchildren():

childs =  item.getchildren()
     for subItem in childs:
           print subItem.get('id')

4.插入子结点

方法一:

item = Element("item", {'sid' : '1713', 'name' : 'ityouhui'})
root.append(item)

方法二:

SE(root,'item',{'sid':'1713','name':'ityouhui'})

方法一的优势在于插入节点后,可以直接对该item对象进行后续操作。方法二在语法上更为简洁,其中SE即为SubElement的别名,已在引入部分声明。

5.操作属性

获取Element的某个属性值(eg:获取item的 name)

print root.find('item/name').text
print item.get('name')

获取Element所有属性

print item.items()       # [('sid', '1712'), ('name', '大CC')]
print item.attrib        # {'sid': '1712', 'name': '大CC'}

6.美化XML

在写入文件之前,对root调用此函数,可使输出的XML文件格式整齐美观:

indent(root)
book.write(xmlfile,'utf-8')
## Get pretty look
def indent( elem, level=0):
    i = "\n" + level*"  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        for e in elem:
            indent(e, level+1)
        if not e.tail or not e.tail.strip():
            e.tail = i
    if level and (not elem.tail or not elem.tail.strip()):
        elem.tail = i
    return elem

到此这篇关于python通过ElementTree操作XML的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。