Python使用sax模块解析XML文件示例


Posted in Python onApril 04, 2019

本文实例讲述了Python使用sax模块解析XML文件。分享给大家供大家参考,具体如下:

XML样例:

<?xml version="1.0"?>
<collection shelf="New Arrivals">
  <movie title="Enemy Behind">
    <type>War, Thriller</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>
    <movie title="Trigun">
    <type>Anime, Action</type>
    <format>DVD</format>
    <episodes>4</episodes>
    <rating>PG</rating>
    <stars>10</stars>
    <description>Vash the Stampede!</description>
  </movie>
  <movie title="Ishtar">
    <type>Comedy</type>
    <format>VHS</format>
    <rating>PG</rating>
    <stars>2</stars>
    <description>Viewable boredom</description>
  </movie>
</collection>

SAX解析代码展示:

from xml import sax
class MovieHandler(sax.ContentHandler):
  def __init__(self):
    # 初始化数据,并增加一个当前数据
    self.CurrentData = ""
    self.type = ""
    self.format = ""
    self.year = ""
    self.rating = ""
    self.stars = ""
    self.description = ""
  # 文档启动的时候调用
  def startDocument(self):
    print('XML开始解析中...')
  # 元素开始事件处理
  def startElement(self, name, attrs):
    self.CurrentData=name
    if self.CurrentData=='movie':
      print('*********movie*********')
      title=attrs['title']
      print('Title:{0}'.format(title))
  # 内容事件处理
  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
  # 元素结束事件处理
  def endElement(self, name):
    if self.CurrentData=='type':
      print('Type:{0}'.format(self.type))
    elif self.CurrentData=='format':
      print('Format:{0}'.format(self.format))
    elif self.CurrentData=='year':
      print('Year:{0}'.format(self.year))
    elif self.CurrentData == 'rating':
      print('Rating:{0}'.format(self.rating))
    elif self.CurrentData == 'stars':
      print('Stars:{0}'.format(self.stars))
    elif self.CurrentData == 'description':
      print('Description:{0}'.format(self.description))
    self.CurrentData = ""
  # 文档结束的时候调用
  def endDocument(self):
    print('XML文档解析结束!')
if __name__=='__main__':
  handler=MovieHandler()
  parser = sax.make_parser()
  # parser.setFeature(sax.handler.feature_namespaces, 0)
  parser.setContentHandler(handler)
  parser.parse("sax_test.xml")
Python 相关文章推荐
python学习之编写查询ip程序
Feb 27 Python
Python使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
Python+微信接口实现运维报警
Aug 27 Python
python去掉行尾的换行符方法
Jan 04 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
Jun 14 Python
Python Flask基础教程示例代码
Feb 07 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 Python
python字符串的多行输出的实例详解
Jun 08 Python
详解小白之KMP算法及python实现
Apr 04 #Python
Python魔法方法功能与用法简介
Apr 04 #Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 #Python
pandas删除指定行详解
Apr 04 #Python
详解python之heapq模块及排序操作
Apr 04 #Python
python实现kmp算法的实例代码
Apr 03 #Python
详解python多线程之间的同步(一)
Apr 03 #Python
You might like
Zerg兵种介绍
2020/03/14 星际争霸
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
基于jquery实现多选下拉列表
2017/08/02 jQuery
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
python继承和抽象类的实现方法
2015/01/14 Python
最基础的Python的socket编程入门教程
2015/04/23 Python
深入解析Python中的WSGI接口
2015/05/11 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
python redis 删除key脚本的实例
2019/02/19 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
正规的求职信范文分享
2013/12/11 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
安全演讲稿大全
2014/05/09 职场文书
保护环境建议书300字
2014/05/13 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
高三英语教学计划
2015/01/23 职场文书
管理人员岗位职责
2015/02/14 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
小学二年级语文教学反思
2016/03/03 职场文书