python使用sax实现xml解析

之前在使用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=========

猜你喜欢

转载自www.cnblogs.com/chenadong/p/9117156.html