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