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的更多相关文章

  1. Python:使用基于事件驱动的SAX解析XML

    SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 ...

  2. python sax解析xml

    #books.xml<catalog> <book isbn="0-596-00128-2"> <title>Python & XML& ...

  3. Python—使用xml.sax解析xml文件

    什么是sax? SAX是一种基于事件驱动的API. 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器. 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件; 而事件处 ...

  4. Android之SAX解析XML

    一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...

  5. Android 使用pull,sax解析xml

    pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...

  6. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  7. DOM&SAX解析XML

    在上一篇随笔中分析了xml以及它的两种验证方式.我们有了xml,但是里面的内容要怎么才能得到呢?如果得不到的话,那么还是没用的,解析xml的方式主要有DOM跟SAX,其中DOM是W3C官方的解析方式, ...

  8. cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)

    今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...

  9. SAX解析xml浅析

    SAX解析XML文件采用事件驱动的方式进行,也就是说,SAX是逐行扫描文件,遇到符合条件的设定条件后就会触发特定的事件,回调你写好的事件处理程序.使用SAX的优势在于其解析速度较快,占用内存较少(相对 ...

随机推荐

  1. 微信小程序可以转发给微信好友了

    微信小程序又放大招了:小程序页面可以放置转发按钮,分享更流畅.同时开放了微信运动步数.背景音乐播放等更多基础能力.小程序可以在自己的页面上放置转发按钮,用户点击后,即可将喜欢的内容分享给好友或群聊,体 ...

  2. 004-restful应用构建、分布式会话、测试工具简介

    一.概述 什么是rest(表述性状态转移,Representational State Transfer)是一种架构风格.他定义了创建可扩展Web服务的最佳实践. 1.Richardson成熟度模型 ...

  3. 【SVD、特征值分解、PCA关系】

    一.SVD    1.含义: 把矩阵分解为缩放矩阵+旋转矩阵+特征向量矩阵. A矩阵的作用是将一个向量从V这组正交基向量的空间旋转到U这组正交基向量的空间,并对每个方向进行了一定的缩放,缩放因子就是各 ...

  4. Jmeter知识点

    聚合报告说明 https://www.cnblogs.com/duanxz/p/5464993.html JMeter之Ramp-up Period(in seconds)说明(可同时并发) http ...

  5. [Java in NetBeans] Lesson 05. Method/function

    这个课程的参考视频和图片来自youtube. 主要学到的知识点有: Define a method:(motivation: write one time, but use it many times ...

  6. 《大道至简》第一章读后感Java伪代码

    在<大道至简>第一章中,周爱民先生引用一则<愚公移山>的寓言,引出了编程的根本:顺序.选择.循环.“愚公移山”的工程虽然庞大,但是可以通过极其简单的变成来完成.我身边的有一些人 ...

  7. FluentScheduler:开源轻量级定时任务调度架构

    安装:FluentScheduler Install-Package FluentScheduler 一.控制台中使用 using System; using System.Collections.G ...

  8. iOS 开发笔记 - 开发中如何实现自动检测更新APP

    1.获取当前项目APP版本号 2.拿到AppStore项目版本号 3.对比版本号,实现更新功能 直接上代码: #import "ViewController.h" //1一定要先配 ...

  9. 利用css伪类编写冒泡小三角

    HTML代码 <div class="lf otherLogin"> <span>其他方式注册</span> <div class=&qu ...

  10. 海量交通大数据应用平台MTDAP_nchang的经验记录

    WRONGTYPE Operation against a key holding the wrong kind of value 根本的就是redis同一个key的value值前后类型不一致,比如最 ...