Python ElementTree 保存时使XML格式化

XML(可扩展标记语言)是一种常用的数据交换格式,它具有良好的可读性和可扩展性。在Python中,我们可以使用ElementTree模块来解析和创建XML文档。ElementTree模块提供了一种简单而灵活的方式来处理XML数据。然而,默认情况下,ElementTree将生成的XML文档保存为紧凑格式,这可能不方便阅读和调试。本文将介绍如何使用ElementTree保存XML时使其格式化,以便更好地理解和使用。

ElementTree简介

在开始之前,我们先来简单了解一下ElementTree模块。ElementTree是Python标准库中的一个模块,用于解析和操作XML文档。它提供了一种简单而高效的方式来处理XML数据,并且适用于Python 2.x和Python 3.x版本。

ElementTree模块的核心概念是Element和ElementTree对象。Element对象表示XML文档的一个元素,它可以包含子元素和属性。ElementTree对象表示整个XML文档,它是一个包含一个或多个Element对象的层次化结构。

ElementTree模块提供了一系列的函数和方法来创建、解析和操作XML文档,其中最常用的是Element()函数和ElementTree.write()方法。Element()函数用于创建一个Element对象,而ElementTree.write()方法用于将整个XML文档保存到一个文件中。

ElementTree保存XML默认格式

让我们首先来看一下使用ElementTree保存XML时的默认格式。假设我们有一个简单的XML文档,包含一个根元素和两个子元素。

import xml.etree.ElementTree as ET

# 创建根元素
root = ET.Element('root')

# 创建子元素
child1 = ET.SubElement(root, 'child1')
child2 = ET.SubElement(root, 'child2')

# 创建ElementTree对象
tree = ET.ElementTree(root)

# 保存XML文档
tree.write('default.xml')

上述代码将生成一个名为default.xml的XML文档。让我们来看一下default.xml的内容:

<root><child1 /><child2 /></root>

可以看到,生成的XML文档是紧凑格式的,所有的元素和属性都没有缩进和换行,这对于阅读和调试来说并不友好。

ElementTree保存XML格式化

为了更好地阅读和调试XML文档,我们可以使用xml.dom.minidom模块来对生成的XML文档进行格式化。xml.dom.minidom模块提供了一些函数和方法来解析和操作XML文档,其中最常用的是toprettyxml()方法。

让我们修改上面的代码,将生成的XML文档保存为格式化的形式:

import xml.etree.ElementTree as ET
import xml.dom.minidom as md

# 创建根元素
root = ET.Element('root')

# 创建子元素
child1 = ET.SubElement(root, 'child1')
child2 = ET.SubElement(root, 'child2')

# 创建ElementTree对象
tree = ET.ElementTree(root)

# 格式化XML文档
xmlstr = ET.tostring(root, encoding='utf-8')
dom = md.parseString(xmlstr)
formatted_xml = dom.toprettyxml(indent='  ')

# 保存XML文档
with open('formatted.xml', 'w') as f:
    f.write(formatted_xml)

上述代码将生成一个名为formatted.xml的XML文档。让我们来看一下formatted.xml的内容:

<?xml version="1.0" ?>
<root>
  <child1/>
  <child2/>
</root>

可以看到,生成的XML文档现在具有缩进和换行,更加易读和可理解。

总结

通过使用ElementTree模块和xml.dom.minidom模块,我们可以方便地创建、解析和操作XML文档。然而,默认情况下,ElementTree保存的XML文档是紧凑格式的,不太方便阅读和调试。通过使用xml.dom.minidom模块的toprettyxml()方法,我们可以将生成的XML文档保存为格式化