Python XML解析.docx

上传人:b****2 文档编号:17599265 上传时间:2023-07-27 格式:DOCX 页数:11 大小:17.41KB
下载 相关 举报
Python XML解析.docx_第1页
第1页 / 共11页
Python XML解析.docx_第2页
第2页 / 共11页
Python XML解析.docx_第3页
第3页 / 共11页
Python XML解析.docx_第4页
第4页 / 共11页
Python XML解析.docx_第5页
第5页 / 共11页
Python XML解析.docx_第6页
第6页 / 共11页
Python XML解析.docx_第7页
第7页 / 共11页
Python XML解析.docx_第8页
第8页 / 共11页
Python XML解析.docx_第9页
第9页 / 共11页
Python XML解析.docx_第10页
第10页 / 共11页
Python XML解析.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Python XML解析.docx

《Python XML解析.docx》由会员分享,可在线阅读,更多相关《Python XML解析.docx(11页珍藏版)》请在冰点文库上搜索。

Python XML解析.docx

PythonXML解析

PythonXML解析

什么是XML?

XML指可扩展标记语言(eXtensibleMarkupLanguage)。

XML被设计用来传输和存储数据。

XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。

它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。

python对XML的解析

常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。

python有三种方法解析XML,SAX,DOM,以及ElementTree:

1.SAX(simpleAPIforXML)

pyhton标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。

2.DOM(DocumentObjectModel)

将XML数据在内存中解析成一个树,通过对树的操作来操作XML。

3.ElementTree(元素树)

ElementTree就像一个轻量级的DOM,具有方便友好的API。

代码可用性好,速度快,消耗内存少。

注:

因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。

本章节使用到的XML实例文件movies.xml内容如下:

War,Thriller

DVD

2003

PG

10

TalkaboutaUS-Japanwar

Anime,ScienceFiction

DVD

1989

R

8

Aschientificfiction

Anime,Action

DVD

4

PG

10

VashtheStampede!

Comedy

VHS

PG

2

Viewableboredom

python使用SAX解析xml

SAX是一种基于事件驱动的API。

利用SAX解析XML文档牵涉到两个部分:

解析器和事件处理器。

解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;

而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。

∙1、对大型文件进行处理;

∙2、只需要文件的部分内容,或者只需从文件中得到特定信息。

∙3、想建立自己的对象模型的时候。

在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler。

ContentHandler类方法介绍

characters(content)方法

调用时机:

从行开始,遇到标签之前,存在字符,content的值为这些字符串。

从一个标签,遇到下一个标签之前,存在字符,content的值为这些字符串。

从一个标签,遇到行结束符之前,存在字符,content的值为这些字符串。

标签可以是开始标签,也可以是结束标签。

startDocument()方法

文档启动的时候调用。

endDocument()方法

解析器到达文档结尾时调用。

startElement(name,attrs)方法

遇到XML开始标签时调用,name是标签的名字,attrs是标签的属性值字典。

endElement(name)方法

遇到XML结束标签时调用。

make_parser方法

以下方法创建一个新的解析器对象并返回。

xml.sax.make_parser([parser_list])

参数说明:

∙parser_list-可选参数,解析器列表

parser方法

以下方法创建一个SAX解析器并解析xml文档:

xml.sax.parse(xmlfile,contenthandler[,errorhandler])

参数说明:

∙xmlfile-xml文件名

∙contenthandler-必须是一个ContentHandler的对象

∙errorhandler-如果指定该参数,errorhandler必须是一个SAXErrorHandler对象

parseString方法

parseString方法创建一个XML解析器并解析xml字符串:

xml.sax.parseString(xmlstring,contenthandler[,errorhandler])

参数说明:

∙xmlstring-xml字符串

∙contenthandler-必须是一个ContentHandler的对象

∙errorhandler-如果指定该参数,errorhandler必须是一个SAXErrorHandler对象

Python解析XML实例

#coding=utf-8

#!

/usr/bin/python

importxml.sax

classMovieHandler(xml.sax.ContentHandler):

def__init__(self):

self.CurrentData=""

self.type=""

self.format=""

self.year=""

self.rating=""

self.stars=""

self.description=""

#元素开始事件处理

defstartElement(self,tag,attributes):

self.CurrentData=tag

iftag=="movie":

print"*****Movie*****"

title=attributes["title"]

print"Title:

",title

#元素结束事件处理

defendElement(self,tag):

ifself.CurrentData=="type":

print"Type:

",self.type

elifself.CurrentData=="format":

print"Format:

",self.format

elifself.CurrentData=="year":

print"Year:

",self.year

elifself.CurrentData=="rating":

print"Rating:

",self.rating

elifself.CurrentData=="stars":

print"Stars:

",self.stars

elifself.CurrentData=="description":

print"Description:

",self.description

self.CurrentData=""

#内容事件处理

defcharacters(self,content):

ifself.CurrentData=="type":

self.type=content

elifself.CurrentData=="format":

self.format=content

elifself.CurrentData=="year":

self.year=content

elifself.CurrentData=="rating":

self.rating=content

elifself.CurrentData=="stars":

self.stars=content

elifself.CurrentData=="description":

self.description=content

if(__name__=="__main__"):

#创建一个XMLReader

parser=xml.sax.make_parser()

#turnoffnamepsaces

parser.setFeature(xml.sax.handler.feature_namespaces,0)

#重写ContextHandler

Handler=MovieHandler()

parser.setContentHandler(Handler)

parser.parse("movies.xml")

以上代码执行结果如下:

*****Movie*****

Title:

EnemyBehind

Type:

War,Thriller

Format:

DVD

Year:

2003

Rating:

PG

Stars:

10

Description:

TalkaboutaUS-Japanwar

*****Movie*****

Title:

Transformers

Type:

Anime,ScienceFiction

Format:

DVD

Year:

1989

Rating:

R

Stars:

8

Description:

Aschientificfiction

*****Movie*****

Title:

Trigun

Type:

Anime,Action

Format:

DVD

Rating:

PG

Stars:

10

Description:

VashtheStampede!

*****Movie*****

Title:

Ishtar

Type:

Comedy

Format:

VHS

Rating:

PG

Stars:

2

Description:

Viewableboredom

完整的SAXAPI文档请查阅PythonSAXAPIs

使用xml.dom解析xml

文件对象模型(DocumentObjectModel,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。

一个DOM的解析器在解析一个XML文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。

python中用xml.dom.minidom来解析xml文件,实例如下:

#coding=utf-8

#!

/usr/bin/python

fromxml.dom.minidomimportparse

importxml.dom.minidom

#使用minidom解析器打开XML文档

DOMTree=xml.dom.minidom.parse("movies.xml")

collection=DOMTree.documentElement

ifcollection.hasAttribute("shelf"):

print"Rootelement:

%s"%collection.getAttribute("shelf")

#在集合中获取所有电影

movies=collection.getElementsByTagName("movie")

#打印每部电影的详细信息

formovieinmovies:

print"*****Movie*****"

ifmovie.hasAttribute("title"):

print"Title:

%s"%movie.getAttribute("title")

type=movie.getElementsByTagName('type')[0]

print"Type:

%s"%type.childNodes[0].data

format=movie.getElementsByTagName('format')[0]

print"Format:

%s"%format.childNodes[0].data

rating=movie.getElementsByTagName('rating')[0]

print"Rating:

%s"%rating.childNodes[0].data

description=movie.getElementsByTagName('description')[0]

print"Description:

%s"%description.childNodes[0].data

以上程序执行结果如下:

Rootelement:

NewArrivals

*****Movie*****

Title:

EnemyBehind

Type:

War,Thriller

Format:

DVD

Rating:

PG

Description:

TalkaboutaUS-Japanwar

*****Movie*****

Title:

Transformers

Type:

Anime,ScienceFiction

Format:

DVD

Rating:

R

Description:

Aschientificfiction

*****Movie*****

Title:

Trigun

Type:

Anime,Action

Format:

DVD

Rating:

PG

Description:

VashtheStampede!

*****Movie*****

Title:

Ishtar

Type:

Comedy

Format:

VHS

Rating:

PG

Description:

Viewableboredom

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2