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利用Nagios增加微信报警通知的功能
Feb 18 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
使用Template格式化Python字符串的方法
Jan 22 Python
谈一谈基于python的面向对象编程基础
May 21 Python
python super的使用方法及实例详解
Sep 25 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
详解Python IO口多路复用
Jun 17 Python
常用的10个Python实用小技巧
Aug 10 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
PHP中for循环语句的几种变型
2006/11/26 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
Python函数学习笔记
2008/10/07 Python
Python基础之函数用法实例详解
2014/09/10 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
用Python写一个自动木马程序
2019/09/17 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
医院实习接收函
2014/01/12 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
购房意向书范本
2014/04/01 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
python如何读取.mtx文件
2021/04/22 Python
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL