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")
运行结果如下图:
下期更新方法二
网友评论