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的优势在于其解析速度较快,占用内存较少(相对 ...
随机推荐
- idea-常用插件-nginx
1.mac上nginx安装 brew search nginx brew install nginx 当然也可以编译安装 安装完以后,可以在终端输出的信息里看到一些配置路径: /usr/local/e ...
- webstorm2018版安装-破解
安装完成后到下面网址下载破解补丁 网址:http://idea.lanyus.com/ 修改路径 修改同目录下的 WebStorm.exe.vmoptions 和WebStorm64.exe.vmop ...
- C++的函数功能总结
1. string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,返回npos. 2.string的substr(pos=0, count=npos)返回字符串[pos, pos+ ...
- Spark SQL读取Oracle的number类型的数据时精度丢失问题
Spark SQL读取数据Oracle的数据时,发现number类型的字段在读取的时候精度丢失了,使用的spark版本是Spark2.1.0的版本,竟然最后经过排查和网上查资料发现是一个bug.在Sp ...
- 【LeetCode每天一题】Add Two Numbers(两链表相加)
You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...
- 玩nginx部署不同的web app
需求:一台服务器上部署多个应用 ,比如www.host.com/app 映射到 www.host.com:8081 实现方法:1. nginx 使用把路径访问映射到端口上.但是遇到一个问题是web a ...
- 移动开发--viewport
手机浏览器默认做了2件事情: 一.页面渲染在一个980px(ios,安卓可能有640px或1000多不等)的viewport. 二.缩放 为什么渲染时,要有viewport? 为了排版正确(980px ...
- pyqt常用窗口组件
扩展知识: 熟悉常用的窗口组件: 1 按钮类 QPushButton 普通按钮 QToolButton 工具按钮:通常在工具栏使用 QRadioButton 单选框 QCheckBox ...
- 一个站点配置多个App.config
一个项目一般都只有一个配置文件.web项目中用的是web.config,但项目中有时候需要单独来配置一个文件.比如:app.config,那是否可以呢? 答案是可以的.可以在web.config中指定 ...
- Cocos Creator学习目录
目录 安装和启动 文件结构 编辑器基础 基本概念 (场景树 节点 坐标 组件 ) Cocos Creator 脚本简介 Cocos Creator调试 节点 cc.Node 组件开发cc.Compon ...