博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(十五)xml模块
阅读量:5104 次
发布时间:2019-06-13

本文共 3891 字,大约阅读时间需要 12 分钟。

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

xml的格式如下,就是通过<>节点来区别数据结构的:

#父标签data
#子标签country 属性name="china"
2
#子子标签rank 属性update="yes" 内容2
2018

xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml:

import xml.etree.ElementTree as et                #xml模板应该是最长的的模板了,可以用as简写为et(自定义)tree = et.parse('xml_lesson.xml')                 #用parse()方法来解析xml文件,拿到tree这个对象root = tree.getroot()                             #getroot()拿到根节点print(root.tag)                                   #根节点的标签:datafor i in root:                                    #遍历一级子节点,即
print(i.tag) #子节点的标签:country print(i.attrib) #子节点的属性:{'name': 'china'} print(i.text) #子节点的内容:无,但实际上是一行空行,注意看下面的结果 for j in i: #遍历二级子节点,即
2
2018
print(j.tag) #rank、year print(j.attrib) #{'updated': 'yes'}、{} print(j.text) #2、2018 结果:

data

country
{'name': 'china'}

rank
{'updated': 'yes'}
2
year
{}
2018

 也可以通过直接找节点的方式遍历:

import xml.etree.ElementTree as ettree = et.parse('xml_lesson.xml')root = tree.getroot()for node in root.iter('rank'):              #通过root.iter()方法直接找节点的标签,无论是第几层的节点都可找到,有几个找几个    print(node.tag,node.attrib,node.text) 结果:rank {'updated': 'yes'} 2

修改节点的操作:

import xml.etree.ElementTree as ettree = et.parse('xml_lesson.xml')root = tree.getroot()for node in root.iter('year'):    new_year = int(node.text) + 1     #node.text为字符串,需要转为int    node.text = str(new_year)         #修改year节点的内容,需要转为str    node.set('update','no')           #修改year节点属性,用set()方法tree.write('xml_lesson.xml')          #最后需要写入,这里其实是新建一个文件,如果文件名和之前相同,那就是覆盖 结果:xml_lesson.xml变为:
     
2
2019
 

 删除节点的操作:

xml_lesson.xml为:    
2
2019
47
2019

需求:把排名高于10的国家删除

import xml.etree.ElementTree as ettree = et.parse('xml_lesson.xml')root = tree.getroot()for country in root.findall('country'):        #findall()找到所有country节点    rank = int(country.find('rank').text)      #在每一个country节点下面,find()找到rank节点    if rank > 10:        root.remove(country)                   #root.remove()删除country节点,注意不是删除rank节点tree.write('abc.xml')

另一种写法:

for country in root.iter('country'):    for rank in country.iter('rank'):    # rank = int(country.find('rank').text)        if int(rank.text) > 10:            root.remove(country)tree.write('222.xml')

最后,创建xml文档:

import xml.etree.ElementTree as ETnew_xml = ET.Element("namelist")                                     #生成根节点,tag为namelistname = ET.SubElement(new_xml, "name", attrib={
"enrolled": "yes"}) #生成一级子节点,第一个参数是上一级节点,tag为name,有一个属性age = ET.SubElement(name, "age", attrib={
"checked": "no"}) #生产二级子节点,第一个参数是上一级节点,tag是age,有一个属性sex = ET.SubElement(name, "sex") sex.text = '33' #二级子节点的内容为'33'name2 = ET.SubElement(new_xml, "name", attrib={
"enrolled": "no"})age = ET.SubElement(name2, "age")age.text = '19'et = ET.ElementTree(new_xml) # 生成文档对象et.write("test.xml", encoding="utf-8", xml_declaration=True) #写入

结果生成的test.xml文件:

33
19

 

转载于:https://www.cnblogs.com/xulan0922/p/10211412.html

你可能感兴趣的文章
尚学堂Java面试题整理
查看>>
MySQL表的四种分区类型
查看>>
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
STM32单片机使用注意事项
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>
StringBuffer是字符串缓冲区
查看>>
hihocoder1187 Divisors
查看>>
java入门
查看>>
Spring 整合 Redis
查看>>
Azure 托管镜像和非托管镜像对比
查看>>
JSP:Cookie实现永久登录(书本案例)
查看>>
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
linux--GCC用法
查看>>
Ubuntu下安装MySQL及简单操作
查看>>
OWIN是什么?
查看>>
前端监控
查看>>
clipboard.js使用方法
查看>>