版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q627794135/article/details/82025744
Python Xml 模块应用
xml为python自带的模块,不需要额外的安装。
一:读取XML
ElementTree 表现的是整个xml的树型结构,可以用于初始化一棵树出来用来生成一个新的xml文件,也可以以树的形式来加载一个已有的xml文件
from xml.etree import ElementTree as ET # 导入xml模块
1.# 从文件读取
tree = ET.parse('xmltest.xml') # 读取.xml文件
root = tree.getroot() # 获取根节点,可用列表切片的方法读取节点
2.# 读取xml格式的字符串
xmls = r"<Request lang='zh-CN'><Head>YCY</Head></Request>"
root = ET.fromstring(xmls) # 获取根节点
读取文件 和 读取字符串 方法不一样
二:访问节点内容
from xml.etree import ElementTree as ET # 导入xml模块
tree = ET.parse('xmltest.xml') # 读取.xml文件
root = tree.getroot() # 获取根节点,
rtag = root.tag # 获取节点的标签
rtext = root.text # 获取节点的文本内容
rattrib = root.attrib # 获取节点的属性,返回dict格式,可以通过dict的方法获取具体的内容
### 通过for循环获取
for child in root: # 遍历所有的子节点(不包含后代节点)
print(child.tag)
print(child.attrib) # 如果属性为 空 的话,返回一个空的dict
### 获取指定后代节点
root.iter('Order') # 获取所有的Order节点,返回一个list对象
for i in root.iter('Order'): # 由于是可以可迭代对象,可以通过for循环遍历
print(i.attrib['orderid'])
三:搜索节点
find() # 搜索第一次出现的标签
findall() # 搜索所有标签,返回一个列表
order = root.find('Body') # 搜索Body节点
order = root.findall('Body/Order') # 搜索Body节点下的所有Order节点
### 由于返回的是可迭代对象,可以通过for循环遍历
for child in root.findall('Order'): # 遍历所有的Order节点
ptint(child.attrib) # 打印出Order节点的属性
四:修改节点
head = root.find('Head') # 获取一个节点
head.text = 'YCY2' # 修改值
head.attrib = {'name':'Head'} # 修改属性(覆盖原有的属性)
head.set('age','18') # 添加属性(在原有的基础上添加)
五:创建节点
### 在Head节点下面创建一个子节点
head = root.find('Head') # 获取节点
body = ET.Element('Order') # 创建一个Order节点
body.attrib = {"name":"body"} # 设置属性
head.append(body) # 通过append方法添加节点
六:删除节点
### 删除Head节点下的Order节点
tree = ET.parse('xmltest.xml') # 读取.xml文件
root = tree.getroot() # 获取根节点,
head = root.find('Head') # 获取节点
root.remove(ordss) # 删除节点
tree.write('xmltest.xml') # 保存文件
七:实例:创建XML并保存到文件
from xml.etree import ElementTree as ET
request = ET.Element('request') # 创建根标签
request.attrib = {'service':'Order'} # 设置根标签的属性
head = ET.SubElement(request,'Head') # 在根标签下创建Head标签
head.text = 'YCY' # 设置节点的内容
order = ET.SubElement(head,'Order') # 在Head节点下创建Order节点
order.attrib = {'orderid':'TE2015'} # 设置Order节点的属性
tree = ET.ElementTree(request) # 创建xml对象
tree.write("request.xml") # 保存到文件
### 创建的xml文件内容:
<request service="Order">
<Head>
YCY
<Order orderid="TE2015" />
</Head>
</request>
八:实例:修改XML文件
修改上面创建的xml文件。
1、修改Head节点的属性和内容
2、删除Head节点下的Order节点
3、在根节点下创建Body节点,并设置属性
4、在Body节点创建OrderSearch节点,并设置属性
from xml.etree import ElementTree as ET
updateTree = ET.parse('request.xml')
root = updateTree.getroot()
head = root.find('Head') # 获取Head节点
head.text = None # 修改内容为空
head.attrib = {'name':'Head'} # 修改属性(为该元素重设属性)
head.set('age','18') # 添加属性(在原有的基础上添加)
order = head.find('Order') # 获取Head节点下的Order节点
head.remove(order) # 删除Order节点
body = ET.Element('Body') # 创建节点
body.attrib = {"name":"body"} # 设置节点的属性
order = ET.SubElement(body,'OrderSearch') # 为Body节点下创建一个OrderSearch节点
order.attrib = {'orderid':'TE20150111'} # 创建 OrderSearch节点的属性
root.append(body) # 在根节点里面添加Body节点
updateTree.write("request.xml") # 保存文件
### 修改后的xml文件内容:
<request service="Order">
<Head age="18" name="Head" />
<Body name="body">
<OrderSearch orderid="TE20150111" />
</Body>
</request>