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循环监控远程端口的方法
Mar 14 Python
python创建列表并给列表赋初始值的方法
Jul 28 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
python文件读取失败怎么处理
Jun 23 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 Python
sklearn中的交叉验证的实现(Cross-Validation)
Feb 22 Python
解决python 输出到csv 出现多空行的情况
Mar 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
PHP goto语句简介和使用实例
2014/03/11 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
2019/10/15 PHP
javascript &amp;&amp;和||运算法的另类使用技巧
2009/11/28 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
JavaScript实现多栏目切换效果
2016/12/12 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
vue2.0 路由模式mode=&quot;history&quot;的作用
2018/10/18 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
Python 详解基本语法_函数_返回值
2017/01/22 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
毕业生求职推荐信
2013/11/04 职场文书
家长会标语
2014/06/24 职场文书
绘画专业自荐信
2014/07/04 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
人与自然的观后感
2015/06/18 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS