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使用实例
Sep 17 Python
用Python编写一个简单的Lisp解释器的教程
Apr 03 Python
python实现从网络下载文件并获得文件大小及类型的方法
Apr 28 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
Python2中文处理纪要的实现方法
Mar 10 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
Flask-WTF表单的使用方法
Jul 12 Python
Pytorch之保存读取模型实例
Dec 30 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
Python单链表原理与实现方法详解
Feb 22 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 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中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
jquery 学习之二 属性(类)
2010/11/25 Javascript
JS+CSS实现一个气泡提示框
2013/08/18 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
实例浅析js的this
2016/12/11 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Python版的文曲星猜数字游戏代码
2013/09/02 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
python中setuptools的作用是什么
2020/06/19 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
小学数学教学经验交流材料
2014/05/22 职场文书
钳工实训报告总结
2014/11/04 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
社区干部培训心得体会
2016/01/06 职场文书
JS数组的常用方法整理
2021/03/31 Javascript