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中的序列化存储的方法
Apr 28 Python
深入理解Python中的内置常量
May 20 Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
Jul 27 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
使用python3实现操作串口详解
Jan 01 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
python分数表示方式和写法
Jun 26 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
前端性能优化建议
2020/09/17 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
浅谈es6中的元编程
2020/12/01 Javascript
盘点提高 Python 代码效率的方法
2014/07/03 Python
基于asyncio 异步协程框架实现收集B站直播弹幕
2016/09/11 Python
python样条插值的实现代码
2018/12/17 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
python应用文件读取与登录注册功能
2019/09/23 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
消防器材管理制度
2014/01/28 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
科技节口号
2014/06/19 职场文书
药剂专业自荐书
2014/06/20 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
七一慰问简报
2015/07/20 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android