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对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
Python实现的线性回归算法示例【附csv文件下载】
Dec 29 Python
Python进阶之全面解读高级特性之切片
Feb 19 Python
详解python中@的用法
Mar 27 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
Pytorch实现基于CharRNN的文本分类与生成示例
Jan 08 Python
OpenCV Python实现拼图小游戏
Mar 23 Python
python3跳出一个循环的实例操作
Aug 18 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
Jan 23 Python
解决pycharm下载库时出现Failed to install package的问题
Sep 04 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
php分页函数
2006/07/08 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
实例讲解php将字符串输出到HTML
2019/01/27 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
JavaScript之引用类型介绍
2012/08/10 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
如何快速上手Vuex
2017/02/14 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
解决VueCil代理本地proxytable无效报错404的问题
2020/11/07 Javascript
Python 常用的安装Module方式汇总
2017/05/06 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
Etam德国:内衣精品店
2019/08/25 全球购物
工厂保洁员岗位职责
2013/12/04 职场文书
公司财务自我评价分享
2013/12/17 职场文书
银行简历自我评价
2014/02/11 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
供应链金融服务方案
2014/05/25 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
物理教育专业求职信
2014/06/25 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
工程部岗位职责范本
2015/04/11 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
Jsonp劫持学习
2021/04/01 PHP