之前在使用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_Chen from xml import sax class TestHandler(sax.ContentHandler): # 定义自己的handler类,继承sax.ContentHandler
def __init__(self):
sax.ContentHandler.__init__(self) # 弗父类和子类都需要初始化(做一些变量的赋值操作等)
self._content = ""
self._tag = "" def startElement(self, name, attrs): # 遇到<tag>标签时候会执行的方法,这里的name,attrs不用自己传值的(这里其实是重写)
self._tag = name
if 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._content
elif name == "author":
print "Author: " + self._content
elif name == "year":
print "Year: " + self._content
elif name == "price":
print "Price: " + self._content
else:
pass def characters(self, content): # 获取标签内容
self._content = content if __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=========

python使用sax实现xml解析的更多相关文章

  1. Python的html和xml解析库Beautiful Soup

    网站:http://www.crummy.com/software/BeautifulSoup/ 版权声明:本文博主原创文章,博客,未经同意不得转载.

  2. xml解析(4)

    本节要点: DOM解析方式 SAX解析方式 DOM4J对XML的解析 XML用于将数据组织起来,形成文档用于存储和传输: 更多时候我们需要的是将xml中的数据解析出来,甚至是在程序中动态生成xml. ...

  3. python使用SAX解析xml

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

  4. Python XML解析(转载)

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

  5. Xml解析之——Java/Android/Python

    Xml解析之——Java/Android/Python 一.Xml文件 test.xml <note> <to>George</to> <from>Jo ...

  6. Python XML解析之ElementTree

    参考网址: http://www.runoob.com/python/python-xml.html https://docs.python.org/2/library/xml.etree.eleme ...

  7. python大法好——Python XML解析

    Python XML解析 什么是XML? XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识. 它也是元标记语言,即定义了用于定义其他与 ...

  8. 【Python】xml 解析

    1. XML:指可扩展标记语言,是一种标记语言,用于存储数据和传输数据,但没有像HTML那样具有预定义标签,需要程序猿自定义标签 2. XML的解析:读取XML数据结构中的某些信息,比如读取书的属性 ...

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

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

随机推荐

  1. Ambari集群移动现有复制到另外地方或更改ip地址,导致各项服务组件上为黄色问号代表心跳丢失的解决方案(图文详解)(博主推荐)

    前言 最近,是在做集群搬移工作,大家肯定会遇到如下的场景. (1) 比如,你新购买的电脑,初步者学习使用Ambari集群.从旧电脑复制到新电脑这边来. (2) 比如,你公司Ambari集群的ip,因业 ...

  2. 您的快递(高并发服务器之poll和epoll)请签收

    前言 之前已经介绍过select函数,请参考这篇博客:https://www.cnblogs.com/liudw-0215/p/9661583.html,原理都是类似的,有时间先阅读下那篇博客,以便于 ...

  3. ES6躬行记(3)——解构

    解构(destructuring)是一种赋值语法,可从数组中提取元素或从对象中提取属性,将其值赋给对应的变量或另一个对象的属性.解构地目的是简化提取数据的过程,增强代码的可读性.有两种解构语法,分别是 ...

  4. python 闯关之路四(下)(并发编程与数据库编程)

    并发编程重点: 并发编程:线程.进程.队列.IO多路模型 操作系统工作原理介绍.线程.进程演化史.特点.区别.互斥锁.信号. 事件.join.GIL.进程间通信.管道.队列. 生产者消息者模型.异步模 ...

  5. Http协议中get和post的区别

    get(默认值)是通过URL传递表单值,数据追加在action属性后面. post传递的表单值是隐藏到http报文体中,url中看不到. get是通过url传递表单值,post通过url看不到表单域的 ...

  6. 翻译:ZooKeeper OverView

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk ZooKeeper: 分布式协调服务 ZooKeeper是一个开 ...

  7. Perl语法的基本规则

    因为是比较凌乱的用法规则收集,所以能看懂则看,不能看懂也无所谓.以后也会遇到. Perl脚本第一行使用#!.Perl的后缀名一般为".plx"或".pl",运行 ...

  8. Perl输出复杂数据结构:Data::Dumper,Data::Dump,Data::Printer

    输出复杂结构 Data::Dumper.Data::Dump.Data::Printer都可以用来输出复杂的数据结构.本文只介绍简单的几个输出形式,以后再需要的地方再详细介绍. 前两者建议传递数据结构 ...

  9. 翻译:INSERT(已提交到MariaDB官方手册)

    本文为mariadb官方手册:INSERT的译文. 原文:https://mariadb.com/kb/en/insert/我提交到MariaDB官方手册的译文:https://mariadb.com ...

  10. 【微服务No.1】Consul服务发现在windows下简单使用

    基本介绍: 安装: 下载地址:https://www.consul.io/downloads.html 运行: consul agent -dev 显示这个界面说明已经开启成功. 页面显示: 然后访问 ...