2020-12-09:python-sax

2020-12-09  本文已影响0人  jsharmony

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文档-----------------------------

上一篇下一篇

猜你喜欢

热点阅读