博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day22 Pythonpython 本文xml模块
阅读量:6242 次
发布时间:2019-06-22

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

一、xml介绍

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

xml跟html都是标签语言

我们主要学习的是ElementTree。是Python的xml处理模块,他提供了一个轻量级的对象模型,在使用ElementTree模块时,需要import xml.etree.ElementTre

ElementTree相当于整个xml的节点数,而Element表示节点树中的一个单独节点

我们看下面的xml文本,标签分为两种。

1、自闭和标签<rank updated="yes">2</rank>

2、非自闭和标签<neighbor direction="E" name="Austria" />

xml文件

    
2
2010
141100
5
2013
59900
69
2013
13600

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

1、打印跟标签的名字

import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ETtree = ET.parse("xml_lesson.xml")#parse解析,用ET模块下的parse这个方法把xml文件解析开,解析开拿到一个tree,tree就是一个对象root = tree.getroot()#这个对象可以调用方法,getroot就是根的意思print(root.tag)#root这个对象有一个属性tag,tag的值就是根标签的名字结果: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)结果:

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

for n in root:    print(n.tag)结果:countrycountrycountry

 在打印下country下面的标签

for n in root:    for i in n:        print(i.tag)结果:rankyeargdppcneighborneighborrankyeargdppcneighborrankyeargdppcneighborneighbor

 3、打印标签属性attrib

打印country的属性

for n in root:    print(n.attrib)结果:{'name': 'Liechtenstein'}{'name': 'Singapore'}{'name': 'Panama'}

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

for n in root:    for i in n:        print(i.attrib)结果:{'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)结果:data22010141100NoneNone5201359900None69201313600NoneNone

 5、iter

for n in root.iter("year"):    print(n.tag,n.text)结果:datayear 2010year 2013year 2013

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

import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ETtree = 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")#直接把修改的写入到文件中

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

import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ETtree = 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了

    
2
2012
141100
5
2015
59900

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

import xml.etree.ElementTree as ET #导入模块,名字太长了,把这个模块名重命名为ETnew_xml=ET.Element("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="28"et=ET.ElementTree(new_xml)#生成文档对象et.write("test.xml",encoding="utf8",xml_declaration=True)

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

28

 

转载于:https://www.cnblogs.com/charon2/p/10405719.html

你可能感兴趣的文章
浅谈SLAM的回环检测技术
查看>>
GraphQL 在 koa 框架中的实践
查看>>
网站内部页面如何正确的微调
查看>>
dubbo源码解析(八)远程通信——开篇
查看>>
在Docker中使用Xdebug
查看>>
snabbdom.js(二)
查看>>
【跃迁之路】【657天】程序员高效学习方法论探索系列(实验阶段414-2018.12.01)...
查看>>
Testng(二):监听
查看>>
重构改善既有的代码设计(代码的坏味道)
查看>>
入门量子计算
查看>>
为什么全栈JavaScript经常被黑,而Java却不会被黑?
查看>>
Java设计模式的6大原则
查看>>
在2018年如何优雅的开发一个typescript语言的npm包?
查看>>
一些小小的总结
查看>>
Homestead 环境搭建
查看>>
Retrofit源码分析
查看>>
零基础兴趣或者转行学习Python,我们应该如何入门呢?
查看>>
electron 仿制QQ登录界面
查看>>
基于Spring Boot实现图片上传/加水印一把梭操作
查看>>
聊聊storm的LoggingClusterMetricsConsumer
查看>>