python xml.etree.ElementTree模块生成、解析xml

一: XML文件格式介绍:

<tag attrib = > text </tag> tail
例:<APP_KEY channel = 'CSDN'> hello123456789 </APP_KEY>
- tag,即标签,用于标识该元素表示哪种数据,即APP_KEY
- attrib,即属性,用Dictionary形式保存,即{‘channel’ = ‘CSDN’}
- text,文本字符串,可以用来存储一些数据,即hello123456789
- tail,尾字符串,并不是必须的,例子中没有包含。

二 :生成xml文件


 
from xml.etree import ElementTree as ET
 
def create_name_same(el):
    li = []
    for i in range(10):
        li.append(ET.SubElement(el, 'case'))
    return li
def create_name_not(el):
    ET.SubElement(el, 'name')
    ET.SubElement(el, 'yyy')
    ET.SubElement(el, 'xxx')
 
# 创建根节点
root = ET.Element('tasks')
sub1 = ET.SubElement(root, 'cases')
sub2 = ET.SubElement(root, 'name')
# 创建指定节点的相同名字的子节点
li_sub1_sub_node = create_name_same(sub1)
 
# 创建指定节点的不同名字的子节点
for sub1_sub_node in li_sub1_sub_node:
    create_name_not(sub1_sub_node)
 
# 打印输出root结构
print(ET.dump(root))
 
# 将创建好的root树写入文件
# 第一种写入文件的方法
tree = ET.ElementTree(root)
tree.write("/root/桌面/asd/aaa.xml", encoding='utf-8', xml_declaration=True)
 
# 第二种写入文件的方法 (这个方法生成的xml文件使用文本打开格式是有缩进的)
# ET模块转换root为bytes输出,
xml_string = ET.tostring(root)
from xml.dom import minidom
dom = minidom.parseString(xml_string)
with open("/root/桌面/asd/aaa.xml", 'w', encoding='utf-8') as f:
    dom.writexml(f, addindent='\t', newl='\n', encoding='utf-8')
 
 
 
 
# mindom转换dom为字符串str,查看dom的文本结构
dom.toxml()
dom.toprettyxml()  # 等于 添加了addindent='\t', newl='\n'的xml格式的字符串str形式输出
type(dom.toprettyxml()) 
 
 
 
 
 
# 生成的xml结构
"""
<?xml version="1.0" encoding="utf-8"?>
<tasks>
	<cases>
		<case>
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			<name/>
			<yyy/>
			<xxx/>
		</case>
	</cases>
	<name/>
</tasks>
"""

解析xml


from xml.etree import ElementTree as ET
path = "/root/桌面/asd/aaa.xml"
 
tree = ET.parse(path)
root = tree.getroot()
# 以root节点为根节点,获取root/cases/下所有case,nel为一个列表
nel = root.findall('./cases/case')
# i为nel列表中的case节点
for i in nel:
    i.text = str(111)
 
# nel为root/cases下发现的第一个case节点
nel = root.find('./cases/case')
# i为第一个case节点下的字节点
for i in nel:
    i.text = str(222)
 
# 如果解析的xml文件带有格式, 需要替换掉"\t"、"\n"等格式符号, 再使用mindom写文件
xml_string = ET.tostring(root).replace(b'\t', b'').replace(b'\n', b'')
from xml.dom import minidom
# 重新生成 xml 字符串
dom = minidom.parseString(xml_string)
with open("/root/桌面/asd/aaa.xml", 'w', encoding='utf-8') as f:
    dom.writexml(f, addindent='\t', newl='\n', encoding='utf-8')
 
 
 
 
# 解析在生成文件结构为
"""
<?xml version="1.0" encoding="utf-8"?>
<tasks>
	<cases>
		<case>
			111
			<name>222</name>
			<yyy>222</yyy>
			<xxx>222</xxx>
		</case>
		<case>
			111
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			111
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			111
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			111
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			111
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			111
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			111
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			111
			<name/>
			<yyy/>
			<xxx/>
		</case>
		<case>
			111
			<name/>
			<yyy/>
			<xxx/>
		</case>
	</cases>
	<name/>
</tasks>
"""
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值