python使用SAX解析xml
python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件 在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必须是一个SAX ErrorHandler对象 # parseString方法
# parseString方法创建一个XML解析器并解析xml字符串
# xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
# 参数说明:
# xmlstring - xml字符串
# contenthandler - 必须是一个ContentHandler的对象
# errorhandler - 如果指定该参数,errorhandler必须是一个SAX ErrorHandler对象
# eg_v1 import xml.sax class MovieHandler(xml.sax.ContentHandler):
def __init__(self):
self.CurrentData = ""
self.type = ""
self.format = ""
self.year = ""
self.rating = ""
self.stars = ""
self.description = "" # 开始元素处理
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "movie":
print ("*****movie*****")
title = attributes["title"]
print ("title:",title) # 元素结束处理
def endElement(self, tag):
if self.CurrentData == "type":
print ("type:",self.type)
elif self.CurrentData == "format":
print ("format:",self.format)
elif self.CurrentData == "year":
print ("year:",self.year)
elif self.CurrentData == "rating":
print ("rating:",self.rating)
elif self.CurrentData == "stars":
print ("stars:",self.stars)
elif self.CurrentData == "description":
print ("description:",self.description) # 内容事件处理
def characters(self, content):
if self.CurrentData == "type":
self.type = content
elif self.CurrentData == "format":
self.format = content
elif self.CurrentData == "year":
self.year = content
elif self.CurrentData == "rating":
self.rating = content
elif self.CurrentData == "stars":
self.stars = content
elif self.CurrentData == "description":
self.description =content if (__name__ == "__main__"): parser = xml.sax.make_parser()
parser.setFeature(xml.sax.handler.feature_namespaces,0) Headler = MovieHandler()
parser.setContentHandler( Headler ) parser.parse("movies.xml") # *****movie*****
# title: Enemy Behind
# type: War, Thriller
# format: DVD
# year: 2003
# rating: PG
# stars: 10
# description: Talk about a US-Japan war
# description:
#
# *****movie*****
# title: Transformers
# type: Anime, Science Fiction
# format: DVD
# year: 1989
# rating: R
# stars: 8
# description: A schientific fiction
# description:
#
# *****movie*****
# title: Trigun
# type: Anime, Action
# format: DVD
# rating: PG
# stars: 10
# description: Vash the Stampede!
# description:
#
# *****movie*****
# title: Ishtar
# type: Comedy
# format: VHS
# rating: PG
# stars: 2
# description: Viewable boredom
# description:
python使用SAX解析xml的更多相关文章
- Python:使用基于事件驱动的SAX解析XML
SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 ...
- python sax解析xml
#books.xml<catalog> <book isbn="0-596-00128-2"> <title>Python & XML& ...
- Python—使用xml.sax解析xml文件
什么是sax? SAX是一种基于事件驱动的API. 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器. 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件; 而事件处 ...
- Android之SAX解析XML
一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...
- Android 使用pull,sax解析xml
pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...
- JAVA使用SAX解析XML文件
在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...
- DOM&SAX解析XML
在上一篇随笔中分析了xml以及它的两种验证方式.我们有了xml,但是里面的内容要怎么才能得到呢?如果得不到的话,那么还是没用的,解析xml的方式主要有DOM跟SAX,其中DOM是W3C官方的解析方式, ...
- cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)
今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...
- SAX解析xml浅析
SAX解析XML文件采用事件驱动的方式进行,也就是说,SAX是逐行扫描文件,遇到符合条件的设定条件后就会触发特定的事件,回调你写好的事件处理程序.使用SAX的优势在于其解析速度较快,占用内存较少(相对 ...
随机推荐
- 容器化 RDS:你须要了解数据是怎样被写"坏"的
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/79877076 容器化 RD ...
- Mysql事务原理介绍
事务 一个事务会涉及到大量的cpu计算和IO操作,这些操作被打包成一个执行单元,要么同时都完成,要么同时都不完成. 事务是一组原子性的sql命令或者说是一个独立的工作单元,如果数据库引擎能够成功的对数 ...
- 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
- C 表達式及返回值
以下程序的输出结果是__A____. #include<stdio.h> main() { ,j=; printf("%d,%d\n",++i,j--); } A., ...
- Java知识点ArrayList
ArrayList List<ApiSvcVersion> apiSvcVersionList = apiSvcVersionDao.getListByClientId(map1); // ...
- (转)以太坊 钱包 创建 导入 Keystore
最近闲来无事 研究了下以太坊钱包 下边分享下 准备工作 : 需要用到的加密:BIP32 BIP39 BIP44 SCRYPT 加密算法 githab地址 https://github.com/Nova ...
- Java 基础 常用API ( 正则表达式,Date类,DateFormat类,Calendar类 )
正则表达式 正则表达式的概念 正则表达式(英语:Regular Expression,在代码中常简写为regex). 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个 ...
- tf运作方式之共享变量
转自:https://docs.pythontab.com/tensorflow/how_tos/variable_scope/ 这个讲的不错,能够更理解tf.get_Variable()了.创建时有 ...
- 10.25 AITalkUat部署
准备: git clone AITalkUat工程,在本地跑: 可以直接浏览器访问127.0.0.1:5000() 如果带上参数,可以得到访问的结果127.0.0.1:5000/autoservice ...
- jq closet的使用,找到距离最近的一个父元素;