- Python 数据持久化教程
- Python 数据持久化 - 首页
- Python 数据持久化 - 简介
- Python 数据持久化 - 文件 API
- 使用 os 模块处理文件
- Python 数据持久化 - 对象序列化
- Python 数据持久化 - Pickle 模块
- Python 数据持久化 - Marshal 模块
- Python 数据持久化 - Shelve 模块
- Python 数据持久化 - dbm 包
- Python 数据持久化 - CSV 模块
- Python 数据持久化 - JSON 模块
- Python 数据持久化 - XML 解析器
- Python 数据持久化 - Plistlib 模块
- Python 数据持久化 - Sqlite3 模块
- Python 数据持久化 - SQLAlchemy
- Python 数据持久化 - PyMongo 模块
- Python 数据持久化 - Cassandra 驱动程序
- 数据持久化 - ZODB
- 数据持久化 - Openpyxl 模块
- Python 数据持久化资源
- Python 数据持久化 - 快速指南
- Python 数据持久化 - 有用资源
- Python 数据持久化 - 讨论
Python 数据持久化 - XML 解析器
XML 是 **可扩展标记语言** 的缩写。它是一种可移植的、开源的、跨平台的语言,非常类似于 HTML 或 SGML,并得到万维网联盟的推荐。
它是一种众所周知的的数据交换格式,被大量应用程序使用,例如 Web 服务、办公工具和 **面向服务的架构** (SOA)。XML 格式既可由机器读取,也可由人类读取。
标准 Python 库的 xml 包包含以下用于 XML 处理的模块:
| 序号 | 模块及描述 |
|---|---|
| 1 |
xml.etree.ElementTree ElementTree API,一个简单轻量的 XML 处理器 |
| 2 |
xml.dom DOM API 定义 |
| 3 |
xml.dom.minidom 一个最小的 DOM 实现 |
| 4 |
xml.sax SAX2 接口实现 |
| 5 |
xml.parsers.expat Expat 解析器绑定 |
XML 文档中的数据以树状的层次结构格式排列,从根节点和元素开始。每个元素都是树中的一个节点,并且具有包含在 <> 和 </> 标记中的属性。可以为每个元素分配一个或多个子元素。
以下是一个典型的 XML 文档示例:
<?xml version = "1.0" encoding = "iso-8859-1"?>
<studentlist>
<student>
<name>Ratna</name>
<subject>Physics</subject>
<marks>85</marks>
</student>
<student>
<name>Kiran</name>
<subject>Maths</subject>
<marks>100</marks>
</student>
<student>
<name>Mohit</name>
<subject>Biology</subject>
<marks>92</marks>
</student>
</studentlist>
在使用 **ElementTree** 模块时,第一步是设置树的根元素。每个元素都有一个标签和一个 attrib,它是一个字典对象。对于根元素,attrib 是一个空字典。
import xml.etree.ElementTree as xmlobj
root=xmlobj.Element('studentList')
现在,我们可以在根元素下添加一个或多个元素。每个元素对象可能具有 **子元素**。每个子元素都有一个属性和一个文本属性。
student=xmlobj.Element('student')
nm=xmlobj.SubElement(student, 'name')
nm.text='name'
subject=xmlobj.SubElement(student, 'subject')
nm.text='Ratna'
subject.text='Physics'
marks=xmlobj.SubElement(student, 'marks')
marks.text='85'
这个新元素使用 append() 方法附加到根元素。
root.append(student)
使用上述方法追加任意数量的元素。最后,根元素对象被写入文件。
tree = xmlobj.ElementTree(root)
file = open('studentlist.xml','wb')
tree.write(file)
file.close()
现在,我们来看看如何解析 XML 文件。为此,在 ElementTree 构造函数中,以文件参数的形式提供文件名来构建文档树。
tree = xmlobj.ElementTree(file='studentlist.xml')
树对象具有 **getroot()** 方法来获取根元素,getchildren() 返回其下方的元素列表。
root = tree.getroot() children = root.getchildren()
通过迭代每个子节点的子元素集合,构建与每个子元素对应的字典对象。
for child in children:
student={}
pairs = child.getchildren()
for pair in pairs:
product[pair.tag]=pair.text
然后将每个字典追加到一个列表中,返回原始的字典对象列表。
**SAX** 是一个用于事件驱动的 XML 解析的标准接口。使用 SAX 解析 XML 需要通过继承 xml.sax.ContentHandler 来创建内容处理器。您为感兴趣的事件注册回调,然后让解析器遍历文档。
当您的文档很大或内存有限时,SAX 很有用,因为它在从磁盘读取文件时解析文件,因此整个文件永远不会存储在内存中。
文档对象模型
(DOM) API 是万维网联盟的一项推荐。在这种情况下,整个文件被读入内存并存储在层次结构(基于树)的形式中,以表示 XML 文档的所有特性。
对于大型文件,SAX 的速度不如 DOM。另一方面,如果在许多小文件上使用 DOM,它可能会消耗大量资源。SAX 是只读的,而 DOM 允许更改 XML 文件。