Python中解析xml接口一般有SAX、DOM、ElementTree,SAX是基于事件处理机制,有“解析器”和“事件处理器”,需要引入xml.sax模块和ContentHandler类。
Python 标准库包含 SAX 解析器,SAX 用事件驱动模型,通过在解析 XML 的过程中触发一个个的事件并调用用户定义的回调函数来处理 XML 文件。
如下基本概念需要知道:
XML:可扩展性标记语言,用于标记电子文件使其具有结构性,被设计用来传输和存储数据。
回调函数:什么是回调函数?
基本运行原理:解析器负责读取 XML 文档,并向事件处理器发送事件,如元素开始跟元素结束事件。
######下面直接举例,解析如下file.xml文件:
file.xml######解析代码:analyfile.py
import xml.sax
class HandlerClass(xml.sax.ContentHandler):
def __init__(self):
self.currentdata = ""
self.place = ""
self.space = ""
self.language = ""
print("********初始化事件处理器:HandlerClass*******")
def startDocument(self):
print("-----------------------------开始处理xml文档-----------------------------")
def startElement(self, element, attributes):
self.currentdata = element
if element == "demo":
print("*************%s*************" % element)
print("attr: %s " % attributes["attr"])
def characters(self, text):
if self.currentdata == "place":
print("%s : %s" % (self.currentdata, text))
if self.currentdata == "space":
print("%s : %s" % (self.currentdata, text))
if self.currentdata == "language":
print("%s : %s" % (self.currentdata, text))
self.currentdata = "" # 此语句是避免出现节点元素回车换行空元素情况
def endElement(self, element):
pass
def endDocument(self):
print("-----------------------------结束处理xml文档-----------------------------")
if __name__ == "__main__":
parser = xml.sax.make_parser()
Handler = HandlerClass()
parser.setContentHandler(Handler)
parser.parse("file.xml")
######处理结果:
********初始化事件处理器:HandlerClass*******
-----------------------------开始处理xml文档-----------------------------
*************demo*************
attr: information
place : China
space : 960万平方公里
language : Chinese
*************demo*************
attr: information
place : 河南
space : 16.7万平方公里
language : Chinese
-----------------------------结束处理xml文档-----------------------------
网友评论