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实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
python中dir()与__dict__属性的区别浅析
Dec 10 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
Python3 无重复字符的最长子串的实现
Oct 08 Python
python求一个字符串的所有排列的实现方法
Feb 04 Python
利用python查看数组中的所有元素是否相同
Jan 08 Python
python 可视化库PyG2Plot的使用
Jan 21 Python
python实现简单区块链结构
Apr 25 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
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
Python 正则表达式(转义问题)
2014/12/15 Python
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
浅谈Python3中print函数的换行
2020/08/05 Python
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
五好党支部事迹材料
2014/02/06 职场文书
创先争优承诺书范文
2014/03/31 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
python中tkinter复选框使用操作
2021/11/11 Python
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
MySQL数据管理操作示例讲解
2022/12/24 MySQL