之前在使用xml解析的时候,在网上搜了很多教程,最终没有能按照网上的教程实现需求。

所以呢,只好自己去看源码,在sax的__init__.py下看到这么一段代码:

1 def parse(source, handler, errorHandler=ErrorHandler()):
2     parser = make_parser()
3     parser.setContentHandler(handler)
4     parser.setErrorHandler(errorHandler)
5     parser.parse(source)
# 可以看出来,执行xml解析至少需要两个参数:source:源文件路径和实例化的handler对象

下面我们就用一个例子来是实现一下:(事先说明,这个例子是网上找的,不是自己写的)

<bookstore><book category="CHILDREN"><title>Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price></book><book category="WEB"><title>Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price></book>
</bookstore>

下面将对各个步骤的作用逐个说明:

#!usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/5/30 22:43
# @Author  : Adong_Chenfrom xml import saxclass TestHandler(sax.ContentHandler):                # 定义自己的handler类,继承sax.ContentHandlerdef __init__(self):sax.ContentHandler.__init__(self)     # 弗父类和子类都需要初始化(做一些变量的赋值操作等)self._content = ""self._tag = ""def startElement(self, name, attrs):           # 遇到<tag>标签时候会执行的方法,这里的name,attrs不用自己传值的(这里其实是重写)self._tag = nameif name == "bookstore":print "=========BOOKSTORE========="if self._tag == "book":print "BOOK: " + attrs["category"]print "--------------------------"def endElement(self, name):              # 遇到</tag>执行的方法,name不用自己传值(重写)# print "endElement"if name == "bookstore":print "=========BOOKSTORE========="elif name == "title":print "Title: " + self._contentelif name == "author":print "Author: " + self._contentelif name == "year":print "Year: " + self._contentelif name == "price":print "Price: " + self._contentelse:passdef characters(self, content):                      # 获取标签内容self._content = contentif __name__ == "__main__":handler = TestHandler()         # 自定义类实例化成对象sax.parse("Test2.xml", handler)  # 解析xml文件

  

执行结果如下:

=========BOOKSTORE=========
BOOK: CHILDREN
--------------------------
Title: Harry Potter
Author: J K. Rowling
Year: 2005
Price: 29.99
BOOK: WEB
--------------------------
Title: Learning XML
Author: Erik T. Ray
Year: 2003
Price: 39.95
=========BOOKSTORE=========

转载于:https://www.cnblogs.com/chenadong/p/9117156.html

python使用sax实现xml解析相关推荐

  1. Android使用SAX实现XML解析,使用text/xml格式与后台交互

    这篇博文正式发表于2015-02-16 14:20,现在显示的创建时间2015-02-05 10:07是当初写草稿的时间 一.SAX解析XML 1,首先展示一下要写入以及解析的xml的文件格式: &l ...

  2. python 使用sax 解析xml 文件

    这里不是说xml 的所以如果xml 不了解,可以百度大致看下即可, SAX知识了解 SAX (simple API for XML )  有解析器和事件处理器 解析器负责读取XML文档,并向事件处理器 ...

  3. 常用 XML 解析技术

    现在的软件项目都不是独立的一个项目,都是多系统协调工作.这样的话就涉及到系统间的通讯,通讯就会跟报文传输挂上关系.系统间使用怎样的报文格式进行通讯呢?有的使用固定长度格式报文:有的使用变长格式报文:有 ...

  4. 请利用SAX编写程序解析Yahoo的XML格式的天气预报,获取天气预报——python学习笔记

    1. 题目: 请利用SAX编写程序解析Yahoo的XML格式的天气预报,获取天气预报: 题目是廖雪峰老师的python教程中XML的练习. 本篇博文只是针对这一题目,没有做详细的介绍,如果看不懂可以在 ...

  5. python中xml解析sax_python使用SAX解析xml

    python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件 在python中使用sax方式处理xml要先引入xml.s ...

  6. Python 标准库之 xml.etree.ElementTree xml解析

    Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...

  7. XML文档DOM、SAX、STAX解析方式

    2019独角兽企业重金招聘Python工程师标准>>> XML解析方式有三种:DOM.SAX.StAX xml文档每个成分都是一个节点,每个xml标签对应一个元素节点:整个文档是一个 ...

  8. python 之模块之 xml.dom.minidom解析xml

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...

  9. Python之XML解析详解

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...

  10. Python XML解析

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这 ...

最新文章

  1. QGC地面站参数调节
  2. [视频]用SQL Server Compact创建简单的Windows应用程序
  3. Linux的用户和用户组管理
  4. 使用Java api 和 jni混合方式调用OpenCV
  5. C++中的空类与空结构体大小
  6. .NET Core 3.0深入源码理解HttpClientFactory之实战
  7. linux查找应用主机,Linux 主机和服务器基本性能检查命令和工具
  8. HTTP协议状态码详解(HTTP Status Code)(转)
  9. Eclipse 取消import自动补全具体的类名
  10. navicat mysql 免安装_mysql免安装版配置+navicat测试
  11. 《腾讯是怎么长大的》读书笔记
  12. 本周大新闻|佳能AR头显MREAL X1发布,Quest手势追踪2.0来袭
  13. 11年的macbook还能用吗_8年老本的第二春:2011款Macbook Pro换血记
  14. R语言抽样并验证总体分别为正态分布、均匀分布、指数分布时样本均值的抽样分布
  15. 基金从业考试如何备考?
  16. python添加win32com包,将ppt转换为图片
  17. 侯捷C++->构造函数
  18. sql使用WITH ROLLUP分组统计并求总数
  19. 计算机网络基础知识——(一)
  20. 行业洞察 | 小米发布人形机器人的AI技术

热门文章

  1. php 判断当前协议,JavaScript 判断当前协议是http还是https
  2. Google Docs API 发布,自动化文档处理
  3. NPM — JavaScript 的包管理器
  4. 《Java和Android开发学习指南(第2版)》——第1章,第1.5节本章小结
  5. NOIp 2014 #3 寻找道路 Label:图论
  6. 新手android中ListView实现音乐列表
  7. 【管理心得之三】管理者们扪心自问一下 “你们杀了几个属下”
  8. 对比iOS中的四种数据存储
  9. ASP.NET里的路径的使用-预备篇
  10. 【TDA4系列】向 PSDKRA 添加新的图像传感器