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程序员
Jun 12 Python
python各种语言间时间的转化实现代码
Mar 23 Python
老生常谈python之鸭子类和多态
Jun 13 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
nginx+uwsgi+django环境搭建的方法步骤
Nov 25 Python
python分布式计算dispy的使用详解
Dec 22 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
Dec 04 Python
Python实现随机生成迷宫并自动寻路
Jun 13 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答题类应用接口实例
2015/02/09 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
简单了解常用的JavaScript 库
2020/07/16 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
Python如何实现转换URL详解
2019/07/02 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
简单英文演讲稿
2014/01/01 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
小学教学工作总结2015
2015/05/13 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
实例详解Python的进程,线程和协程
2022/03/13 Python
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL
Python自动化实战之接口请求的实现
2022/05/30 Python