Python3基于sax解析xml操作示例


Posted in Python onMay 22, 2018

本文实例讲述了Python3基于sax解析xml操作。分享给大家供大家参考,具体如下:

python使用SAX解析xml

SAX是一种基于事件驱动的API。

利用SAX解析XML文档牵涉到两个部分:解析器事件处理器

解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件;

而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。

1、对大型文件进行处理;
2、只需要文件的部分内容,或者只需从文件中得到特定信息。
3、想建立自己的对象模型的时候。

在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sax.handler中的ContentHandler

saxDemo.py

# -*- coding:utf-8 -*-
#!/usr/bin/python3
import xml.sax
class MovieHandler( xml.sax.ContentHandler ):
  def __init__(self):
    self.CurrentData = ""
    self.type = ""
    self.format = ""
    self.year = ""
    self.rating = ""
    self.stars = ""
    self.description = ""
  # 元素开始调用
  def startElement(self, tag, attributes):
    self.CurrentData = tag
    if tag == "movie":
      print ("*****Movie*****")
      title = attributes["title"]
      print ("Title:", title)
  # 元素结束调用
  def endElement(self, tag):
    if self.CurrentData == "type":
      print ("Type:", self.type)
    elif self.CurrentData == "format":
      print ("Format:", self.format)
    elif self.CurrentData == "year":
      print ("Year:", self.year)
    elif self.CurrentData == "rating":
      print ("Rating:", self.rating)
    elif self.CurrentData == "stars":
      print ("Stars:", self.stars)
    elif self.CurrentData == "description":
      print ("Description:", self.description)
    self.CurrentData = ""
  # 读取字符时调用
  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
if ( __name__ == "__main__"):
  # 创建一个 XMLReader
  parser = xml.sax.make_parser()
  # turn off namepsaces
  parser.setFeature(xml.sax.handler.feature_namespaces, 0)
  # 重写 ContextHandler
  Handler = MovieHandler()
  parser.setContentHandler( Handler )
  parser.parse("movies.xml")

执行结果

*****Movie*****
Title: Enemy Behind
Type: love中国
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction

运行结果如下图所示:

Python3基于sax解析xml操作示例

movies.xml内容:

<?xml version="1.0" encoding="utf-8"?>
<collection shelf="New Arrivals">
<movie title="Enemy Behind">
  <type>love中国</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>
</collection>
Python 相关文章推荐
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
python使用fileinput模块实现逐行读取文件的方法
Apr 29 Python
Python编程中运用闭包时所需要注意的一些地方
May 02 Python
Python获取系统默认字符编码的方法
Jun 04 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
May 26 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
Python+PyQt5实现美剧爬虫可视工具的方法
Apr 25 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
python实现简单俄罗斯方块
Mar 13 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
python操作redis数据库的三种方法
Sep 10 Python
浅析Python的命名空间与作用域
Nov 25 Python
Python smtplib实现发送邮件功能
May 22 #Python
linux下python使用sendmail发送邮件
May 22 #Python
Python实现的文本对比报告生成工具示例
May 22 #Python
python smtplib模块实现发送邮件带附件sendmail
May 22 #Python
点球小游戏python脚本
May 22 #Python
python smtplib模块自动收发邮件功能(二)
May 22 #Python
python smtplib模块自动收发邮件功能(一)
May 22 #Python
You might like
用PHP读取超大文件的实例代码
2012/04/01 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
使用Python实现一个简单的项目监控
2015/03/31 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
Keras自定义IOU方式
2020/06/10 Python
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
人事行政主管岗位职责
2013/12/22 职场文书
公司授权委托书
2014/04/04 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
行政诉讼答辩状
2015/05/21 职场文书
观看建国大业观后感
2015/06/01 职场文书
Python中else的三种使用场景
2021/06/16 Python
js前端图片加载异常兜底方案
2022/06/21 Javascript