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正规则表达式学习指南
Aug 02 Python
python查看模块安装位置的方法
Oct 16 Python
Python使用pandas对数据进行差分运算的方法
Dec 22 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
python读写csv文件实例代码
Jul 05 Python
python字典setdefault方法和get方法使用实例
Dec 25 Python
Python面向对象编程基础实例分析
Jan 17 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
Django 实现对已存在的model进行更改
Mar 28 Python
Django模型中字段属性choice使用说明
Mar 30 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 Python
如何用Python编写一个电子考勤系统
Feb 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
用在PHP里的JS打印函数
2006/10/09 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
php 浮点数比较方法详解
2017/05/05 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
React应用中使用Bootstrap的方法
2017/08/15 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
python字符串替换的2种方法
2014/11/30 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
实例详解Python装饰器与闭包
2019/07/29 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
Django REST 异常处理详解
2020/07/15 Python
Python 创建TCP服务器的方法
2020/07/28 Python
thinkphp5 路由分发原理
2021/03/18 PHP
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
应聘销售主管的求职信
2014/04/26 职场文书
文秘班元旦晚会活动策划方案
2014/08/28 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
网络妈妈观后感
2015/06/08 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis