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的Supervisor进行进程监控以及自动启动
May 29 Python
python中实现php的var_dump函数功能
Jan 21 Python
python中import学习备忘笔记
Jan 24 Python
python编程嵌套函数实例代码
Feb 11 Python
Flask解决跨域的问题示例代码
Feb 12 Python
python中time库的实例使用方法
Oct 31 Python
基于python及pytorch中乘法的使用详解
Dec 27 Python
深入浅析Python 函数注解与匿名函数
Feb 24 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
python 爬取B站原视频的实例代码
Sep 09 Python
详解Python魔法方法之描述符类
May 26 Python
python数字类型和占位符详情
Mar 13 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
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
js选项卡的制作方法
2017/01/23 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
教你安装python Django(图文)
2013/11/04 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
css sprite简单实例
2016/05/23 HTML / CSS
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
端口镜像是怎么实现的
2014/03/25 面试题
数据库测试通常都包括哪些方面
2015/11/30 面试题
Ajxa常见问题都有哪些
2014/03/26 面试题
大专计算机个人求职的自我评价
2013/10/21 职场文书
化学专业自荐信
2014/05/28 职场文书
合作协议书范文
2014/08/20 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
家长对孩子的寄语
2015/02/26 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
婚庆主持词大全
2015/06/30 职场文书
行政处罚告知书
2015/07/01 职场文书
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis
python基础之类属性和实例属性
2021/10/24 Python