Python ElementTree 生成 XML 并解决头部声明缺失问题

叶初
叶初
发布时间:2026-10-13| 4人浏览过
原创

本文介绍如何使用Python的ElementTree库构建XML树,并重点解决etree.tostring()方法输出缺少XML头部声明的问题。通过对比tree.write()与tostring()的差异,提供了使用minidom解析或设置write参数xml_declaration=True两种解决方案,确保生成的XML文件包含标准的版本声明。

ElementTree简介与导入

在Python中处理XML文档有多种方式,除了传统的SAX和DOM解析器外,ElementTree也是一个常用且高效的工具。

使用前需要导入相应的模块:

from xml.etree import ElementTree as etree

构建XML树结构

接下来开始构建XML树结构:


from xml.etree.ElementTree import Element, SubElement, ElementTree
 
# 生成根节点
root = Element('root')
# 生成第一个子节点 head
head = SubElement(root, 'head')
# head 节点的子节点
title = SubElement(head, 'title')
title.text = 'Well Dola!'
# 生成 root 的第二个子节点 body
body = SubElement(root, 'body')
# body 的内容
body.text = 'I love Dola!'
tree = ElementTree(root)

通过上述代码,我们获得了代表XML树的tree对象以及其根节点root对象。

XML字符串转换及头部缺失问题

随后,将树结构转换为XML字符串主要有两种途径:一是利用tree对象的write方法将内容写入文件,二是使用etree的tostring方法直接转换为XML字符串。


# 第一种
tree.write('result.xml', encoding='utf-8')
# 第二种
xml_string = etree.tostring(root)
# xml_string 就是 xml 字符串了

然而,第二种方法存在一个常见问题,即输出结果中不包含

<?xml version="1.0"?>

这一标准的头部定义信息。例如,直接转换可能得到如下字符串:

'<root><head><title>Well Dola!</title></head><body>I love Dola!</body></root>'

面对这种情况,该如何处理?

使用minidom解决头部声明缺失

一种可行的解决方案是利用minidom模块来实现,具体步骤如下:


from xml.dom import minidom
# 使用 minidom 解析
tree = minidom.parseString(xml_string)
# 重新生成 xml 字符串
xml_string = tree.toxml()

尽管这种方法增加了额外的代码执行开销,但它能有效解决头部声明缺失的问题。

最终生成的XML代码如下所示:

u'<?xml version="1.0" ?><root><head><title>Well Dola!</title></head><body>I love Dola!</body></root>'

此外,还可以利用minidom中tree对象的toprettyxml方法,对生成的XML进行格式化排版,使其更易读。

write方法中启用xml_declaration参数

补充知识:Python ElementTree导出XML时缺少开头声明的处理

在使用ElementTree修改XML后写入文件时,可能会发现文件开头缺少了<?xml version='1.0' encoding='utf-8'?>声明。

解决方法如下:

在调用ElementTree的write方法写入XML时,需要在参数中增加encoding='utf-8'以及xml_declaration=True。

et_root.write('file.xml', encoding='utf-8', xml_declaration=True)

以上关于利用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 算法库。