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之入门(三)序列
May 25 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
python数据结构之链表详解
Sep 12 Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
python 解决cv2绘制中文乱码问题
Dec 23 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 29 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
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
smarty表格换行实例
2014/12/15 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
使用RequireJS优化JavaScript引用代码的方法
2015/07/01 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
Python中的rfind()方法使用详解
2015/05/19 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
python实现斗地主分牌洗牌
2020/06/22 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
消防安全责任书
2014/04/14 职场文书
家长对老师的评语
2014/04/18 职场文书
忠诚教育心得体会
2014/09/03 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python