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

2020-06-11  本文已影响0人  RoninW

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

2.DOM(Document Object Model)

文本对象模型是W3C组织推荐的处理可扩展置标语言的标准编程接口,一个DOM的解析器在解析在解析一个XML文档时,一次性读取整个文档,把文档中所有元素保存在内存的一个树结构中,之后利用DOM提供的不同函数读取或修改文档的内容和结构,也可以把修改过的内容写入XML文件。

XML例子见上期。Py自动化运维-XML解析(一)

代码如下:

 from xml.dom.minidom import parse

import xml.dom.minidom

#使用minidom解析器打开XML文档

DOMTREE = xml.dom.minidom.parse("example.xml")

collection = DOMTREE.documentElement

if collection.hasAttribute("year"):

    print(f"早餐菜单 \n 年份 {collection.getAttribute('year')}")

#在集合中获取所有信息

foods = collection.getElementsByTagName("food")

#打印详细信息

for food in foods:

    type = food.getElementsByTagName("name")[0]

    print("name: %s" % type.childNodes[0].data)

    type1 = food.getElementsByTagName("price")[0]

    print("price: %s" % type1.childNodes[0].data)

    type2 = food.getElementsByTagName("desc")[0]

    print("desc: %s" % type2.childNodes[0].data)

代码说明�:

代码使用minidom解析器打开XML文档,使用getElementsByTagName方法获取所有标签并遍历子标签,逻辑上比SAX要直观。运行如下图:

3.ElemengtTre

ElementTre将XML数据在内存中解析成树,通过树来操作XML。

XML例子不变

代码如下:

import xml.etree.ElementTree as ET

tree = ET.parse("example.xml")

root= tree.getroot()

print(f"早餐菜单 \n 年份 {root.attrib['year']}")

for child in root:

    print("name:", child[0].text)

    print("price:", child[1].text)

    print("desc:", child[2].text)

代码特别简洁,在需要获取XML内全部信息时,推荐使用。

运行结果同DOM 完全一致。

XML解析的三种方式完结。工作中需要根据面对的不用场景选择合适的方法。例如:获取某个网页的全部信息,若该网站内容详情页模版是统一的,就可以用方法三来完成,代码量少,且减轻后续对数据解析的困难度。

上一篇下一篇

猜你喜欢

热点阅读