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

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

<?xml version="1.0"?>
<data> #父标签data
<country name="china"> #子标签country 属性name="china"
<rank updated="yes">2</rank> #子子标签rank 属性update="yes" 内容2
<year>2018</year>
</country>
</data>

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) #根节点的标签:data for i in root: #遍历一级子节点,即<country name='china'>
print(i.tag) #子节点的标签:country
print(i.attrib) #子节点的属性:{'name': 'china'}
print(i.text) #子节点的内容:无,但实际上是一行空行,注意看下面的结果 for j in i: #遍历二级子节点,即<rank updated="yes">2</rank>和<year>2018</year>
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 et
tree = 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 et
tree = 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变为:
<data>
<country name="china">
<rank updated="yes">2</rank>
<year update="no">2019</year>
</country>
</data>


 删除节点的操作:

xml_lesson.xml为:
<data>
<country name="china">
<rank updated="yes">2</rank>
<year update="no">2019</year>
</country>
<country name="India">
<rank updated="yes">47</rank>
<year update="no">2019</year>
</country>
</data>

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

import xml.etree.ElementTree as et
tree = 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 ET

new_xml = ET.Element("namelist")                                     #生成根节点,tag为namelist
name = 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文件:

<?xml version='1.0' encoding='utf-8'?>
<namelist>
<name enrolled="yes">
<age checked="no" />
<sex>33</sex>
</name>
<name enrolled="no">
<age>19</age>
</name>
</namelist>

(十五)xml模块的更多相关文章

  1. python学习第四十九天XML模块的用法

    xml是实现不通语言或程序之间进行数据交换的协议,跟json差不多,但是json用起来简单,还没诞生json,以前都是用xml,下面讲述XML模块的用法. 1,导入xml模块 import xml 2 ...

  2. day15 十五、模块、from导入、起别名

    一.模块的概念 1.什么是模块:一系列功能的集合体 2.定义模块:创建一个py文件就是一个模块,该py文件名就是模块名 模块的四种存在方式 使用python编写的.py文件 包:一堆py文件的集合体 ...

  3. Python学习日记(十五) collections模块

    在内置函数(dict.list.set.tuple)的基础上,collections模块还提供了几个其他的数据类型:Counter.deque.defaultdict.namedtuple和Order ...

  4. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  5. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  6. day20 二十、加密模块、操作配置文件、操作shell命令、xml模块

    一.加密模块 1.hashlib模块:加密 ①有解密的加密方式 ②无解密的加密方式:碰撞检查 -- 1)不同数据加密后的结果一定不一致 -- 2)相同数据的加密结果一定是一致的 import hash ...

  7. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  8. 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需 ...

  9. 孤荷凌寒自学python第二十五天初识python的time模块

    孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...

  10. 第十五章、线程之queue模块的各种队列

    目录 第十五章.线程之queue模块的各种队列 一.Queue 二.LifoQueue堆栈 三.PriorityQueue优先级队列 第十五章.线程之queue模块的各种队列 一.Queue impo ...

随机推荐

  1. 微信小程序图片保存到本地

    微信小程序图片保存到本地是一个常用功能: 这里讲解下完整实现思路: 因为微信官方的授权只弹一次,用户拒绝后再次调用,就需要结合button组件的微信开放能力来调起,以下方案在微信各种授权中可参考. w ...

  2. PDCA

    Plan(规划) Do(执行) Check(验证) Adjust(调整)

  3. Leetcode——练习

    平时没事刷刷Leetcode,还办了个年会员.为了自己150刀.为了自己的大脑投资,从不差钱儿.刷刷题能练习coding,此外看一些别人的优秀的答案,能增长见解.大家共同努力,共勉. 十.Google ...

  4. 面试 16-01.MVVM

    16-01.MVVM #前言 MVVM的常见问题: 如何理解MVVM 如何实现MVVM 是否解读过Vue的源码 题目: 说一下使用 jQuery 和使用框架的区别 说一下对 MVVM 的理解 vue ...

  5. jQuery的事件机制和其他知识

    jQuery 设置宽度和高度 宽度操作: $(selector).height(); //不带参数表示获取高度 $(selector).height(200); //带参数表示设置高度   宽度操作: ...

  6. NameVirtualHost *:80 has no VirtualHosts

    服务器会包含所有的   .conf     后缀的文件 当出现如标题所示的错误的时候,检查所有 .conf 文件,是否端口占用,或者重复命令行的情况

  7. 小白都能理解的Python多继承

    本文主要做科普用,在真实编程中不建议使用多重继承,或者少用多重继承,避免使代码难以理解. 方法解析顺序(MRO) 关于多重继承,比较重要的是它的方法解析顺序(可以理解为类的搜索顺序),即MRO.这个跟 ...

  8. Python爬取热搜存入数据库并且还能定时发送邮件!!!

    一.前言 微博热搜榜每天都会更新一些新鲜事,但是自己处于各种原因,肯定不能时刻关注着微博,为了与时代接轨,接受最新资讯,就寻思着用Python写个定时爬取微博热搜的并且发送QQ邮件的程序,这样每天可以 ...

  9. 用git上传项目到GitHub或者码云全过程

    用git上传项目到GitHub或者码云全过程 1. 会生成一个隐藏文件夹".git".这是一个不可删文件,因为暂存区和历史区还有一些其他的信息都在这里,删掉就不是一个完整的仓库了 ...

  10. wildfly 21中应用程序的部署

    目录 简介 Managed Domain中的部署 管理展开的部署文件 standalone模式下的部署 standalone模式下的自动部署 Marker Files 受管理的和不受管理的部署 部署覆 ...