python sax解析xml
- #books.xml
<catalog>- <book isbn="0-596-00128-2">
- <title>Python & XML</title>
- <title>Python & HTML</title>
- <date>December 2001</date>
- <author>Jones, Drake</author>
- </book>
- <book isbn="0-596-15810-6">
- <title>Programming Python, 4th Edition</title>
- <date>October 2010</date>
- <author>Lutz</author>
- </book>
- <book isbn="0-596-15806-8">
- <title>Learning Python, 4th Edition</title>
- <date>September 2009</date>
- <author>Lutz</author>
- </book>
- <book isbn="0-596-15808-4">
- <title>Python Pocket Reference, 4th Edition</title>
- <date>October 2009</date>
- <author>Lutz</author>
- </book>
- <book isbn="0-596-00797-3">
- <title>Python Cookbook, 2nd Edition</title>
- <date>March 2005</date>
- <author>Martelli, Ravenscroft, Ascher</author>
- </book>
- <book isbn="0-596-10046-9">
- <title>Python in a Nutshell, 2nd Edition</title>
- <date>July 2006</date>
- <author>Martelli</author>
- </book>
- <!-- plus many more Python books that should appear here -->
- </catalog>
- #conding:utf-8
- # -*- coding:utf-8 -*-
- __author__ = 'hdfs'
- '''
- 总的来说 sax解析xml 进行3个阶段 sax是线性解析对于大的xml会很有效率
- '''
- import xml.sax,xml.sax.handler,pprint
- class BookHandler(xml.sax.handler.ContentHandler):
- def __init__(self):
- self.inTitle=False
- self.mapping={}
- def startElement(self, name, attrs):
- #book标签开始
- if name=="book":
- self.buffer=""
- self.isbn=attrs["isbn"]
- #title标签开始
- elif name=="title":
- self.inTitle=True
- def characters(self,data):
- #如果真的进入buffer 关联多个子节点的数据
- if self.inTitle:
- self.buffer+=data
- #结束一个元素的遍历
- def endElement(self,name):
- if name=="title":
- self.inTitle=False
- self.mapping[self.isbn]=self.buffer
- parser=xml.sax.make_parser()
- handler=BookHandler()
- parser.setContentHandler(handler)
- parser.parse('books.xml')
- pprint.pprint(handler.mapping)
result:
- {u'0-596-00128-2': u'Python & XMLPython & HTML',
- u'0-596-00797-3': u'Python Cookbook, 2nd Edition',
- u'0-596-10046-9': u'Python in a Nutshell, 2nd Edition',
- u'0-596-15806-8': u'Learning Python, 4th Edition',
- u'0-596-15808-4': u'Python Pocket Reference, 4th Edition',
- u'0-596-15810-6': u'Programming Python, 4th Edition'}
python sax解析xml的更多相关文章
- Python:使用基于事件驱动的SAX解析XML
SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 ...
- Python—使用xml.sax解析xml文件
什么是sax? SAX是一种基于事件驱动的API. 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器. 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件; 而事件处 ...
- 用 ElementTree 在 Python 中解析 XML
用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...
- Android之SAX解析XML
一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...
- Android 使用pull,sax解析xml
pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...
- JAVA使用SAX解析XML文件
在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...
- DOM&SAX解析XML
在上一篇随笔中分析了xml以及它的两种验证方式.我们有了xml,但是里面的内容要怎么才能得到呢?如果得不到的话,那么还是没用的,解析xml的方式主要有DOM跟SAX,其中DOM是W3C官方的解析方式, ...
- cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)
今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...
- SAX解析xml浅析
SAX解析XML文件采用事件驱动的方式进行,也就是说,SAX是逐行扫描文件,遇到符合条件的设定条件后就会触发特定的事件,回调你写好的事件处理程序.使用SAX的优势在于其解析速度较快,占用内存较少(相对 ...
随机推荐
- 怎样让enum枚举支持string
原文发布时间为:2011-03-02 -- 来源于本人的百度文章 [由搬家工具导入] 大家都知道enum是以下两种情况,不能支持string 1,enum类型是静态 2,enum类型仅限于long、i ...
- error LNK2001: unresolved external symbol __imp__WSAStartup@8 SOCKET(转)
VC6.0下的错误信息: error LNK2001: unresolved external symbol __imp__socket@12 error LNK2001: unresolved ex ...
- 《手把手教你学C语言》学习笔记(8)--- 运算符和表达式
C语言编程的核心是指针和库,而库的核心就是函数,函数的基本组成部分就是语句. C语言合法表达式加上分号(语句结束符)构成C函数的基本部分语句.如果只有分号没有表达式就构成空语句,空语句常常用来形成占位 ...
- hibernate中SQL包含冒号
当前负责的项目使用的是hibernate,而“:”是hibernate的一个占位符,作为预编译使用的, select tmp.pid from (select pid, loginTime, @i : ...
- Codeforces 158 B. Taxi[贪心/模拟/一辆车最多可以坐4人同一个群的小朋友必须坐同一辆车问最少需要多少辆车]
http://codeforces.com/problemset/problem/158/B B. Taxi time limit per test 3 seconds memory limit pe ...
- weblogic内存快速配置
# IF USER_MEM_ARGS the environment variable is set, use it to override ALL MEM_ARGS values USER_MEM_ ...
- scanf格式控制符之%[]的应用
考虑只读入小写字母的字符串,这个问题要如何用scanf解决呢? 这就用到了%[] 这个格式控制符,它支持a-z这样的格式控制 char s[111]; scanf("%[a-z]" ...
- 微信工作汇报系统2——IOS原型设计
上一篇博客:一款自动汇报工作的微信机器人 上一篇博客中说道,我打算自己做一款能自动汇报工作的微信机器人,可惜学识有限,最后不知道怎么实现让机器人学习我的文本说话,所以就一直耽搁了,见天又打开这个系列, ...
- Docker镜像原理和最佳实践
https://yq.aliyun.com/articles/68477 https://yq.aliyun.com/articles/57126 DockerCon 2016 深度解读: Dock ...
- 安全 -- mysql参数化查询,防止Mysql注入
参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数(Parameter) ...