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 16 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
python机器学习包mlxtend的安装和配置详解
Aug 21 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
Python pickle模块实现对象序列化
Nov 22 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
python中对二维列表中一维列表的调用方法
Jun 07 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
python实现磁盘日志清理的示例
Nov 05 Python
python 下载文件的多种方法汇总
Nov 17 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的类 功能齐全的发送邮件类
2006/10/09 PHP
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
Python中文件操作简明介绍
2015/04/13 Python
Python中return语句用法实例分析
2015/08/04 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
园林技术个人的自我评价
2014/02/15 职场文书
人民调解员培训方案
2014/06/05 职场文书
质量安全标语
2014/06/07 职场文书
教师自我剖析材料
2014/09/29 职场文书
三好学生主要事迹材料
2015/11/03 职场文书