序列化指的是将内存中的数据对象转换成一种可以存储或传输的格式。其中XML是一种通用的数据交换格式,可被多种程序和平台读取、编辑和处理,因此Python也提供了相关的XML序列化库。下面是Python 序列化数据为XML的完整攻略:
1. 安装xml.etree.ElementTree库
Python标准库已经包含了xml库,使得操作XML文档变得容易。这个XML库是Python的一个直接内置的轻量级XML处理器,名为xml.etree.ElementTree。因此,我们只需要导入该库即可。
import xml.etree.ElementTree as ET
2. 创建一个根元素对象
我们需要首先创建一个根元素对象,该根元素将包含其他所有的XML元素和数据。
root = ET.Element("root")
3. 添加子元素和数据
接下来,我们可以添加其他的子元素和数据来构建完整的XML文档。
# 添加一个名称为“book”的子元素,同时添加其属性
book = ET.SubElement(root, "book", attrib={"type": "fiction"})
# 添加一个名称为“title”的子元素,并添加文本数据
title = ET.SubElement(book, "title")
title.text = "The Catcher in the Rye"
# 添加一个名称为“author”的子元素,并添加文本数据
author = ET.SubElement(book, "author")
author.text = "J.D. Salinger"
4. 序列化XML
使用xml.etree.ElementTree的tostring()函数,将创建的根元素对象转换为XML字符串。
xml_string = ET.tostring(root)
print(xml_string)
输出结果如下:
b'<root><book type="fiction"><title>The Catcher in the Rye</title><author>J.D. Salinger</author></book></root>'
示例说明1:将Python字典序列化为XML文件
import xml.etree.ElementTree as ET
# 创建根节点
root = ET.Element("root")
# 添加第一个子节点
student = ET.SubElement(root, "student")
# 向子节点添加属性
student.set("id", "10001")
# 添加子节点数据
name = ET.SubElement(student, "name")
name.text = "Lucy"
score = ET.SubElement(student, "score")
score.text = "90"
# 生成XML文件
tree = ET.ElementTree(root)
tree.write("student.xml", encoding="UTF-8")
示例说明2:将Python对象序列化为XML文件
import xml.etree.ElementTree as ET
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
# 创建根节点
root = ET.Element("root")
# 添加第一个子节点
book = ET.SubElement(root, "book")
# 添加数据
title = ET.SubElement(book, "title")
title.text = Book("The Catcher in the Rye", "J.D. Salinger").title
author = ET.SubElement(book, "author")
author.text = Book("The Catcher in the Rye", "J.D. Salinger").author
# 生成XML文件
tree = ET.ElementTree(root)
tree.write("book.xml", encoding="UTF-8")
通过以上示例,可以看到Python 序列化数据为XML的详细过程以及如何将Python字典和对象序列化为XML文档。