Python3基于sax解析xml操作示例


Posted in Python onMay 22, 2018

本文实例讲述了Python3基于sax解析xml操作。分享给大家供大家参考,具体如下:

python使用SAX解析xml

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

利用SAX解析XML文档牵涉到两个部分:解析器事件处理器

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

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

1、对大型文件进行处理;
2、只需要文件的部分内容,或者只需从文件中得到特定信息。
3、想建立自己的对象模型的时候。

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

saxDemo.py

# -*- coding:utf-8 -*-
#!/usr/bin/python3
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)
    self.CurrentData = ""
  # 读取字符时调用
  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__"):
  # 创建一个 XMLReader
  parser = xml.sax.make_parser()
  # turn off namepsaces
  parser.setFeature(xml.sax.handler.feature_namespaces, 0)
  # 重写 ContextHandler
  Handler = MovieHandler()
  parser.setContentHandler( Handler )
  parser.parse("movies.xml")

执行结果

*****Movie*****
Title: Enemy Behind
Type: love中国
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction

运行结果如下图所示:

Python3基于sax解析xml操作示例

movies.xml内容:

<?xml version="1.0" encoding="utf-8"?>
<collection shelf="New Arrivals">
<movie title="Enemy Behind">
  <type>love中国</type>
  <format>DVD</format>
  <year>2003</year>
  <rating>PG</rating>
  <stars>10</stars>
  <description>Talk about a US-Japan war</description>
</movie>
<movie title="Transformers">
  <type>Anime, Science Fiction</type>
  <format>DVD</format>
  <year>1989</year>
  <rating>R</rating>
  <stars>8</stars>
  <description>A schientific fiction</description>
</movie>
</collection>
Python 相关文章推荐
python的urllib模块显示下载进度示例
Jan 17 Python
Python3实现的字典、列表和json对象互转功能示例
May 22 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
Django models.py应用实现过程详解
Jul 29 Python
Python yield的用法实例分析
Mar 06 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
Python爬取微信小程序Charles实现过程图解
Sep 29 Python
Python colormap库的安装和使用详情
Oct 06 Python
Django celery异步任务实现代码示例
Nov 26 Python
pandas中DataFrame重置索引的几种方法
May 24 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 Python
Python smtplib实现发送邮件功能
May 22 #Python
linux下python使用sendmail发送邮件
May 22 #Python
Python实现的文本对比报告生成工具示例
May 22 #Python
python smtplib模块实现发送邮件带附件sendmail
May 22 #Python
点球小游戏python脚本
May 22 #Python
python smtplib模块自动收发邮件功能(二)
May 22 #Python
python smtplib模块自动收发邮件功能(一)
May 22 #Python
You might like
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
JavaScript 密码强度判断代码
2009/09/05 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
mock.js模拟前后台交互
2019/07/25 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
Vue 401配合Vuex防止多次弹框的案例
2020/11/11 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
python编程羊车门问题代码示例
2017/10/25 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
python实现三次样条插值
2018/12/17 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
房屋质量投诉书
2015/07/02 职场文书
财务人员入职担保书
2015/09/22 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL