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中Collection的使用小技巧
Aug 18 Python
Python with用法实例
Apr 14 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
Python解决走迷宫问题算法示例
Jul 27 Python
用Python shell简化开发
Aug 08 Python
Python日期时间Time模块实例详解
Apr 15 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
如何基于Django实现上下文章跳转
Sep 16 Python
如何一键升级Python所有包
Nov 05 Python
Pycharm常用快捷键总结及配置方法
Nov 14 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
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
javascript IFrame 强制刷新代码
2009/07/23 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
vue2实现数据请求显示loading图
2017/11/28 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
React中的render何时执行过程
2018/04/13 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Python中pygame安装方法图文详解
2015/11/11 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
Python实现的字典值比较功能示例
2018/01/08 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
新闻学毕业生自荐信
2013/11/15 职场文书
国贸专业个人求职信分享
2013/12/04 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
2014入党积极分子批评与自我批评思想汇报
2014/09/20 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
用python自动生成日历
2021/04/24 Python
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS