Python数据持久性 XML解析器

Python数据持久性 XML解析器

XML是 eXtensible Markup Language 的首字母缩写 它是一种可移植的、开源的、跨平台的语言,非常像HTML或SGML,并由万维网联盟推荐。

它是一种著名的数据交换格式,被大量的应用程序使用,如网络服务、办公工具和 面向服务的架构 (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 模块时,第1步是建立树的根元素。每个元素都有一个标签和attrib,是一个dict对象。对于根元素,attrib是一个空的字典。

import xml.etree.ElementTree as xmlobj
root=xmlobj.Element('studentList')

现在,我们可以在根元素下添加一个或多个元素。每个元素对象可以有 SubElements。 每个子元素都有一个属性和文本属性。

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文件进行修改。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程