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