一、XML介绍

xml是实现不同语言或程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单,不过现在还有很多传统公司的接口主要还是xml

xml跟html都属于是标签语言

我们主要学习的是ElementTree是python的XML处理模块,它提供了一个轻量级的对象模型,在使用ElementTree模块时,需要import xml.etree.ElementTre
ElementTree相当于整个xml节点树,而Element表示节点数中的一个单独节点
我们看下下面的xml文本,标签分为2种。
1、自闭和标签  <rank updated="yes">2</rank>
2、非闭合标签  <neighbor direction="E" name="Austria" />
<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year updated="yes">2010</year>
<gdppc>141100</gdppc>
<neighbor direction="E" name="Austria" />
<neighbor direction="W" name="Switzerland" />
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year updated="yes">2013</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
</country>
<country name="Panama">
<rank updated="yes">69</rank>
<year updated="yes">2013</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica" />
<neighbor direction="E" name="Colombia" />
</country>
</data> 

二、xml.etree.ElementTree 模块的具体应用

1、打印根标签的名字

import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ET
tree = ET.parse("xml_lesson.xml")#parse解析,用ET模块下的parse这个方法把xml文件解析开,解析开拿到一个tree,tree就是一个对象
root = tree.getroot()#这个对象可以调用方法,getroot就是根的意思
print(root.tag)#root这个对象有一个属性tag,tag的值就是根标签的名字 C:\python35\python3.exe D:/pyproject/day21模块/xml_test data

什么是标签,什么是属性,举个例子

<country name="Liechtenstein">

conuntry是标签

name="Liechtenstein" 是这个标签的属性

<neighbor direction="W" name="Costa Rica" />

neighbor是标签

direction="W" name="Costa Rica"  这2个都是标签的属性

2、用for循环查看下root下面是什么东西

for n in root:
print(n) C:\python35\python3.exe D:/pyproject/day21模块/xml_test <Element 'country' at 0x0000000000E339F8> <Element 'country' at 0x0000000000E38408> <Element 'country' at 0x0000000000E38598>

这3个地址指向的就是对象,打印下这三个标签的名字,用tag这个属性就可以了

for n in root:
print(n.tag) C:\python35\python3.exe D:/pyproject/day21模块/xml_test country country country

在打印下country下面的标签

for n in root:
for i in n:
print(i.tag) C:\python35\python3.exe D:/pyproject/day21模块/xml_test rank year gdppc neighbor neighbor rank year gdppc neighbor rank year gdppc neighbor neighbor

3、打印标签的属性 attrib

打印country的属性

for n in root:
print(n.attrib) C:\python35\python3.exe D:/pyproject/day21模块/xml_test {'name': 'Liechtenstein'} {'name': 'Singapore'} {'name': 'Panama'}

在打印下country里面的对象的属性

for n in root:
for i in n:
print(i.attrib) C:\python35\python3.exe D:/pyproject/day21模块/xml_test {'updated': 'yes'} {'updated': 'yes'} {} {'name': 'Austria', 'direction': 'E'} {'name': 'Switzerland', 'direction': 'W'} {'updated': 'yes'} {'updated': 'yes'} {} {'name': 'Malaysia', 'direction': 'N'} {'updated': 'yes'} {'updated': 'yes'} {} {'name': 'Costa Rica', 'direction': 'W'} {'name': 'Colombia', 'direction': 'E'}

4、text  标签实际包裹的内容

for n in root:
for i in n:
print(i.text) C:\python35\python3.exe D:/pyproject/day21模块/xml_test 2 2010 141100 None None 5 2013 59900 None 69 2013 13600 None None 

5、iter

想取到每个属性中的year的text值就应该用iter方法这样取

for n in root.iter("year"):
print(n.tag,n.text) C:\python35\python3.exe D:/pyproject/day21模块/xml_test year 2010 year 2013 year 2013

6、对xml文件数据进行修改操作

import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ET

tree = ET.parse("xml_lesson.xml")#parse解析,用ET模块下的parse这个方法把xml文件解析开,
#解析开拿到一个tree,tree就是一个对象
root = tree.getroot()#这个对象可以调用方法,getroot就是根的意思
# print(root.tag)#root这个对象有一个属性tag,tag的值就是根标签的名字 for n in root.iter("year"):
new_year=int(n.text)+1
n.text=str(new_year)#修改year标签的text属性
n.set("updated1","yes")#给year这个标签增加一个属性
tree.write("xml_lesson.xml")#直接把修改的写入到文件中
<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year updated="yes" updated1="yes">2012</year>
<gdppc>141100</gdppc>
<neighbor direction="E" name="Austria" />
<neighbor direction="W" name="Switzerland" />
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year updated="yes" updated1="yes">2015</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
</country>
<country name="Panama">
<rank updated="yes">69</rank>
<year updated="yes" updated1="yes">2015</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica" />
<neighbor direction="E" name="Colombia" />
</country>
</data>

7、对xml文件进行删除操作,比如删除排名大于50的国家,需要取到每个conutry中的rank的text

import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ET

tree = ET.parse("xml_lesson.xml")#parse解析,用ET模块下的parse这个方法把xml文件解析开,
#解析开拿到一个tree,tree就是一个对象
root = tree.getroot()#这个对象可以调用方法,getroot就是根的意思
# print(root.tag)#root这个对象有一个属性tag,tag的值就是根标签的名字 for n in root.findall("country"):#找到所有的country
rank=int(n.find("rank").text)#找到所有的rank的text值
if rank > 50:#判断值大于50的
root.remove(n)#就删除country这个标签
tree.write("xml_lesson.xml")#写入文件

删除之后,文件里面只有2个country了

<data>
<country name="Liechtenstein">
<rank updated="yes">2</rank>
<year updated="yes" updated1="yes">2012</year>
<gdppc>141100</gdppc>
<neighbor direction="E" name="Austria" />
<neighbor direction="W" name="Switzerland" />
</country>
<country name="Singapore">
<rank updated="yes">5</rank>
<year updated="yes" updated1="yes">2015</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
</country>
</data>

8、如何通过模块创建xml文件呢

import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ET
new_xml=ET.Element("namelist")#创建了一个根节点
#相当于创建了<namelist></namelist>
name=ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
#创建一个子标签name,然后增加一个属性
age=ET.SubElement(name,"age",attrib={"checked":"no"})
sex=ET.SubElement(name,"sex")
sex.text="" et=ET.ElementTree(new_xml)#生成文档对象
et.write("test.xml",encoding="utf8",xml_declaration=True)

查看下生成的text.xml这个文件内容

<namelist>

<name enrolled="yes">

<age checked="no"/>

<sex>28</sex>

</name>

</namelist> 

python的内置模块xml模块方法 xml解析 详解以及使用的更多相关文章

  1. python的内置模块re模块方法详解以及使用

    正则表达式 一.普通字符 .     通配符一个.只匹配一个字符 匹配任意除换行符"\n"外的字符(在DOTALL模式中也能匹配换行符 >>> import re ...

  2. 【Python实战】模块和包导入详解(import)

    1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...

  3. Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量

    Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量 一丶线程的理论知识 什么是线程:    1.线程是一堆指令,是操作系统调度 ...

  4. Python中生成器和yield语句的用法详解

    Python中生成器和yield语句的用法详解 在开始课程之前,我要求学生们填写一份调查表,这个调查表反映了它们对Python中一些概念的理解情况.一些话题("if/else控制流" ...

  5. python编写微信公众号首图思路详解

    前言 之前一直在美图秀秀调整自己的微信公众号首图,效果也不尽如人意,老是调来调去,最后发出来的图片被裁剪了一大部分,丢失部分关键信息,十分恼火,于是想着用python写一个程序,把微信公众号首图的模式 ...

  6. cloudemanager安装时出现failed to receive heartbeat from agent问题解决方法(图文详解)

    不多说,直接上干货! 安装cdh5到最后报如下错误: 安装失败,无法接受agent发出的检测信号. 确保主机名称正确 确保端口7182可在cloudera manager server上访问(检查防火 ...

  7. cloudemanager安装时出现8475 MainThread agent ERROR Heartbeating to 192.168.30.1:7182 failed问题解决方法(图文详解)

    不多说,直接上干货!   问题详情 解决这个问题简单的,是因为有进程占用了.比如 # ps aux | grep super root ? Ss : : /opt/cm-/lib64/cmf/agen ...

  8. .NET Excel导出方法及其常见问题详解

    摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ...

  9. 利用python求解物理学中的双弹簧质能系统详解

    利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...

随机推荐

  1. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  2. Prometheus Operator - 每天5分钟玩转 Docker 容器技术(177)

    前面我们介绍了 Kubernetes 的两种监控方案 Weave Scope 和 Heapster,它们主要的监控对象是 Node 和 Pod.这些数据对 Kubernetes 运维人员是必须的,但还 ...

  3. c:\windows\system32\config\systemprofile\desktop 打不开

    Question 重启开机后显示桌面打不开: 再次重启后无效 Solution 打开注册表regedit如下路径,复制Desktop值到 同路径下的Desktop中,再重启.

  4. Docker 架构(二)【转】

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建. 容器与镜像的关系类似于面向对象编程中的对象与类 ...

  5. c/c++ 多线程 绕过mutex的保护

    多线程 绕过mutex的保护 mutex,能够解决线程安全的问题,但它不是万能的.下面的例子虽然使用了mutex,但是恶意注入了一个外部函数,导致把被mutex保护的双向链表,让一个外部的指针指向了, ...

  6. Cs231n课堂内容记录-Lecture 7 神经网络训练2

    Lecture 7  Training Neural Networks 2 课堂笔记参见:https://zhuanlan.zhihu.com/p/21560667?refer=intelligent ...

  7. 如何解决分配到Autoconfiguration IPV4 地址

    配置完服务器静态IP后,在CMD窗口中查看ip地址,发现是Autoconfiguration IPV4. 上网搜索了,是关于虚拟服务器的,但是我没有配置虚拟服务器,有点奇怪. 使用下面的教程,可以解决 ...

  8. 常见设计模式 (python代码实现)

    1.创建型模式 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对 ...

  9. 重写override

    不可重写私有方法. 不可重写非静态的方法,虽然编译器不会报错,但是得不到预期的结果. 可以通过重写的形式对父类的功能进行重新定义,比如:对功能进行修改或者进行升级时. class BaseAction ...

  10. SaaS服务和个性化需求,就不能鱼和熊掌兼得吗?

    随时随地.轻松高效,移动工作让人类的自由度最大化.但企业的移动化过程却不轻松:要综合考虑销售.产品.客服.市场销售.人力资源等错综复杂的流程和需求,以及原有IT系统.数据信息的对接. 千企千面,很难有 ...