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字符串替换的2种方法
Nov 30 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
May 05 Python
python定时检查某个进程是否已经关闭的方法
May 20 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
Python每天必学之bytes字节
Jan 28 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
python读取与处理netcdf数据方式
Feb 14 Python
Pycharm Git 设置方法
Sep 15 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
详解Python中如何将数据存储为json格式的文件
Nov 18 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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&amp;MYSQL服务器配置说明
2006/10/09 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
PHP实现的日历功能示例
2018/09/01 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
微信小程序合法域名配置方法
2019/05/06 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
python实现html转ubb代码(html2ubb)
2014/07/03 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
写给爸爸的道歉信
2014/01/15 职场文书
2014年元旦感言
2014/03/06 职场文书
广告学专业求职信
2014/06/19 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
Mysql 设置boolean类型的操作
2021/06/04 MySQL
MySQL插入数据与查询数据
2022/03/25 MySQL