美文网首页
Py自动化运维-XML解析(一)

Py自动化运维-XML解析(一)

作者: RoninW | 来源:发表于2020-06-09 18:25 被阅读0次

Py自动化运维解析XML共有三种方法:

1.SAX(simple API for XML)

SAX是一种基于事件驱动的API,使用时设计两个部分,即解析器和事件处理器。解析器负责读取XML文件,并向事件处理器发送相应的事件(如元素开始事件,元素结束时间)。事件处理器对相应的事件作出相应,对数据做出处理。使用方法是先创建一个新的XMLReader对象,然后设置XMLReader的事件处理器ContentHandler,最后执行XMLReader的parse()方法

来看一个解析XML的例子,example.xml 内容如下:

<breakfast_menu  year="2018">

<food>

<name>老八秘制小汉堡</name>

<price>5</price>

<desc>既实惠又管饱</desc>

</food>

<food>

<name>狗不理包子</name>

<price>10</price>

<desc>皮包馅大没有褶</desc>

</food>

</breakfast_menu>

read_xml.py 如下:

import xml.sax

class MenuHandler(xml.sax.ContentHandler):

    def __init__(self):

        self.CurrentData = ""

        self.name = ""

        self.price = ""

        self.desc = ""

    # 元素开始调用

    def startElement(self, tag, attributes):

        self.CurrentData = tag

        if tag == "breakfast_menu":

            print("早餐菜单")

            year = attributes["year"]

            print(f"年份 {year}\n")

    # 读取字符时调用

    def characters(self, content):

        if self.CurrentData == "name":

            self.name = content

        elif self.CurrentData == "price":

            self.price = content

        elif self.CurrentData == "desc":

            self.desc = content

        else:

            pass

    # 元素结束调用

    def endElement(self, tag):

        if self.CurrentData == "name":

            print(f"name: {self.name}")

        elif self.CurrentData == "price":

            print(f"price: {self.price}")

        elif self.CurrentData == "desc":

            print(f"desc: {self.desc}")

        else:

            pass

        self.CurrentData == ""

if __name__ == "__main__":

    # 创建一个XMLReader

    parser = xml.sax.make_parser()

    Handler = MenuHandler()

    parser.setContentHandler(Handler)

    parser.parse("example.xml")

运行结果如下图:

下期更新方法二

相关文章

网友评论

      本文标题:Py自动化运维-XML解析(一)

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