pytho xml
转载自:https://www.cnblogs.com/gouguoqilinux/p/9168332.html
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")#直接把修改的写入到文件中
- <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="28"
- 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>
pytho xml的更多相关文章
- XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法
在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...
- .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?
物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- WebApi接口 - 响应输出xml和json
格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...
- XML技术之DOM4J解析器
由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...
- UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)
最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...
- PHP中遍历XML之SimpleXML
简单来讲述一些XML吧,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.XML是当今用于传输数据的两大工具之一,另外一个是json. 我们在PHP中使用XML也是用来传输数据, ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- Mybatis XML配置
Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
随机推荐
- CSS + ul li 横向排列的两种方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ControlTemplate in WPF —— DatePicker
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...
- wpf prism4 出现问题:无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
WPF Prism 框架 程序 出现 问题: 无法加载一个或多个请求的类型.有关更多信息,请检索 LoaderExceptions 属性. 1.开始以为是配置的问题,找了半天,最后原来是有个依赖类库没 ...
- Python 基础语法_Python脚本文件结构
目录 目录 前言 软件环境 Python Script文件结构 导入模块的流程 Python的包package 最后 前言 Python基础语法这一章,主要记录了Python的文件结构.逻辑运算符.算 ...
- PyCharm安装+破解
PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性,鉴于目前最新版 PyCharm 使用教程较少,为了节约时间,来介绍一下 PyCharm 在 Windows下是如何安装的. 这是 ...
- Java中volatile关键字的最全总结
转载至:https://blog.csdn.net/u012723673/article/details/80682208 关于volatile很重要的一点: 它保证了可见性,即其他线程对volati ...
- c++ release和debug语句分离
#ifdef _DEBUG a=1; #else a=2; #endif
- [转帖]Spring Cloud底层原理
拜托!面试不要再问我Spring Cloud底层原理 https://mp.weixin.qq.com/s/ZH-3JK90mhnJPfdsYH2yDA 毫无疑问,Spring Cloud 是目前微服 ...
- CentOS7之ssh-Xshell密钥认证登陆
操作系统版本:CentOS Linux release 7.2.1511 (Core) SSH版本:OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 1.打开Xshell工 ...
- gym102201F_Fruit Tree
题意 给一棵带权树,多次询问路径上出现次数超过一半的数. 分析 dfs序建主席树,维护的就是根到某个节点这段路径的值域情况. 因为题目所求的不是一般的众数,而是出现次数大于一半的,所以在主席树上可以直 ...