#books.xml
<catalog>
<book isbn="0-596-00128-2">
<title>Python &amp; XML</title>
<title>Python &amp; 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'}

最新文章

  1. Atitit 理解Monad attilax总结
  2. javascript平时小例子⑥(简易计算器的制作)
  3. 判断 ACdream 1202 Integer in C++
  4. javascript生成n至m的随机整数
  5. 谈谈 Mifare Classic 破解
  6. dtrace-oracle-vage :吕海波
  7. phpmyadmin修改mysql数据库密码
  8. AWS EC2笔记
  9. 新概念英语(1-67)The weekend
  10. IE下的deflate模式
  11. 菜鸟教程之学习Shell script笔记(上)
  12. Vivado Design Suite用户指南之约束的使用第一部分(介绍部分)
  13. Mysql 数据库操作之DDL、DML、DQL语句操作
  14. DirectShow设置采集帧率码率YUV&lt;转&gt;
  15. 一次典型的TFS故障处理:域控失联
  16. 【BZOJ】4025: 二分图
  17. 【Spark】SparkStreaming-流处理-规则动态更新-解决方案
  18. Docker 镜像操作
  19. java 调用短信 api 接口发送短信
  20. 002 Jupyter-NoteBook工具介绍(网页版编辑器)

热门文章

  1. 51Nod 1028 大数乘法 V2
  2. 洛谷 P 2756 飞行员配对方案问题
  3. js动态添加select菜单 联动菜单
  4. Linux signal 那些事儿 (3)【转】
  5. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---24
  6. hdu 3879 hdu 3917 构造最大权闭合图 俩经典题
  7. hdu 1595(最短路变形好题)
  8. Android新特性之CardView的简单使用
  9. Google的新一代一致性哈希算法
  10. 正确地使用GIT FORK