美文网首页
2020-12-09:python-sax

2020-12-09:python-sax

作者: jsharmony | 来源:发表于2020-12-09 21:09 被阅读0次

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

    相关文章

      网友评论

          本文标题:2020-12-09:python-sax

          本文链接:https://www.haomeiwen.com/subject/pzdkgktx.html