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 中使用 GLOBAL引发的一系列问题
Oct 12 Python
最近Python有点火? 给你7个学习它的理由!
Jun 26 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
Apr 15 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
树莓派极简安装OpenCv的方法步骤
Oct 10 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
pycharm2020.2 配置使用的方法详解
Sep 16 Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 Python
python网络爬虫实现发送短信验证码的方法
Feb 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
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
php自动加载方式集合
2016/04/04 PHP
模仿jQuery each函数的链式调用
2009/07/22 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
javascript简单实现命名空间效果
2014/03/06 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
实例讲解Python中的私有属性
2014/08/21 Python
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
农村婚庆司仪主持词
2014/03/15 职场文书
销售经理岗位职责
2014/03/16 职场文书
新年寄语大全
2014/04/12 职场文书
集中整治工作方案
2014/05/01 职场文书
个人自查自纠材料
2014/10/14 职场文书