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使用wxpython开发简单记事本的方法
May 20 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
Python 找到列表中满足某些条件的元素方法
Jun 26 Python
Python JSON格式数据的提取和保存的实现
Mar 22 Python
Python面向对象程序设计类的多态用法详解
Apr 12 Python
pandas如何处理缺失值
Jul 31 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
Feb 12 Python
python 字典item与iteritems的区别详解
Apr 25 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 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/04/17 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
python在每个字符后添加空格的实例
2018/05/07 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
CK美国官网:Calvin Klein
2016/08/26 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
写求职信要注意什么问题
2014/04/12 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
工作简报范文
2015/07/21 职场文书
信息技术研修心得体会
2016/01/08 职场文书
编写python程序的90条建议
2021/04/14 Python
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android