解析方法有两种: 推荐2
1.使用xml.dom.minidom解析
2.使用xml.etree.ElementTree解析
方法一:xml.dom.minidom
python中使用xml.dom.minidom来解析XML文件
import xml.dom.minidom as xmldom
import os
""" 比如现在有包含以下xml信息的文件 test.xml
<note>
<date>
<day>08</day>
<month>08</month>
<year>2008</year>
</date>
<to a="1">George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
"""
# 拿到XML文件路径
xml_file_path = os.path.abspath("./data/test.xml")
# 得到文档对象
xml_obj = xmldom.parse(xml_file_path)
print("xml对象类型:",type(xml_obj))
# 得到元素对象(文档树结构) 可省略
elementobj = xml_obj.documentElement # 根元素
print("元素对象类型:",type(elementobj))
# 获得子元素 下面两种方式是一样的效果
body = xml_obj.getElementsByTagName("body")[0].firstChild.data
body1 = elementobj.getElementsByTagName("body")[0].firstChild.data
print(body) # Don't forget the meeting!
print(body1) # Don't forget the meeting!
# 获得标签属性值
attr = xml_obj.getElementsByTagName("to")[0].getAttribute("a")
print(attr) # 1
方法二:xml.etree.ElementTree
python 包 xml.etree.ElementTree 是用来处理XML对象的,比如你使用python的request包或者urllib3的http连接池PoolManager,发送一个请求,响应的是XML数据,这个时候就需要解析这个xml对象来得到我们想要的数据
import xml.etree.ElementTree as et
import os
import sys
# 打开xml文件的两种方式:1.读取xml文件 2.直接解析xml对象字符串
# 方式一: et.parse("file_path") # 读取xml文件
file_path = os.path.abspath("./data/test.xml")
root = et.parse(file_path)
print(root.find("from").text) # John
print(root.find("to").get("a")) # 1
# 方式二: et.fromstring("xml_content") # 直接解析xml对象字符串
import urllib3
urllib3.disable_warnings() # 禁用各种urllib3的警告
http = urllib3.PoolManager(retries=2,timeout=10,num_pools=200,maxsize=200)
# 使用连接池发起一个请求
res = http.request("GET","")
if res.status == 200:
# 使用方式二解析xml对象
root = et.fromstring(res.data)
# 拿到根元素
node = root.find("note")
# 还可以通过下标的方式访问 node = root[0]
# 拿到 from标签
ele_from = node.find("from") # 如果有多个form 想拿到所有form,就使用node.findall()方法,返回一个列表
# 拿到标签的值
value = ele_from.text
print(value)
# 获取属性使用get,设置属性使用set
a = node.find("to").get("a")
node.find("to").set("a", 2)
网友评论