python xml.etree.ElementTree模块
使用的XML文件如下:file.xml
<?xml version="1.0"?>
<data name="ming">
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
</country>
</data>
导入模块
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/11/30 0030 18:18
# @Author : ming
import xml.etree.ElementTree as ET
读取文件
result = ET.parse("file.xml") # 打开文件
root = result.getroot() # 获取根节点
打印一下根节点信息
print(root.tag, root.attrib) # 根节点标签和属性值
#运行结果:data {'name': 'ming'}
打印一下根节点的孩子节点
for i in root: # 循环根节点的孩子节点
print(i.tag, i.attrib) # 打印孩子节点的标签和属性值
print(i[0].tag, i[0].text) # 打印孙子节点中第一个节点的标签和属性值。多层节点都可以通过下标访问
# 运行结果:
# country {'name': 'Singapore'}
# rank 4
# country {'name': 'Panama'}
# rank 68
findall 直接定位节点
for k in root.findall('country'): # 直接定位该节点
print(k.tag, k.attrib) # 打印孩子节点的标签和属性值
print(k[1].tag, k[1].text) # 打印孙子节点中第一个节点的标签和属性值。多层节点都可以通过下标访问
#运行结果
# country {'name': 'Singapore'}
# year 2011
# country {'name': 'Panama'}
# year 2011
iter 遍历所有节点
for m in root.iter(): # 遍历所有节点
print(m.tag, m.attrib, m.text) # 打印所有节点的标签、属性、值
data {'name': 'ming'}
country {'name': 'Singapore'}
rank {} 4
year {} 2011
gdppc {} 59900
neighbor {'name': 'Malaysia', 'direction': 'N'} None
country {'name': 'Panama'}
rank {} 68
year {} 2011
gdppc {} 13600
neighbor {'name': 'Costa Rica', 'direction': 'W'} None
neighbor {'name': 'Colombia', 'direction': 'E'} None
运行结果
iter 遍历特定的节点,不遍历子节点
for p in root.iter("country"): # 遍历所有country节点自身,不遍历子节点
print(p.tag, p.attrib) # 打印所有country节点的标签、属性
#运行结果
# country {'name': 'Singapore'}
# country {'name': 'Panama'}
find 查找第一个匹配的节点
firstCountry = root.find("country") # 返回第一个tag为country的element,如没有,返回None
print(firstCountry.attrib) # 第一个country节点的属性值
# 运行结果
# {'name': 'Singapore'}
append 增加一个新的节点
newEle = ET.Element("Newtag") # 新节点的标签
newEle.attrib = {"name": "NewElement", "age": ""} # 新节点的属性
newEle.text = "This is a new element" # 新节点的值
# a = root.find("country") # 第一个country节点
# a.append(newEle) # 在第一个country中添加
#
# root[0].append(newEle) # 根节点中第一个子节点下添加
root.append(newEle) # 把这个新节点放在哪个节点下,这里的root代表根节点
result.write("file.xml") # 写回原文件
<data name="ming">
<country name="Singapore">
<rank>4</rank>
<year>2011</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia"/>
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica"/>
<neighbor direction="E" name="Colombia"/>
</country>
<Newtag age="20" name="NewElement">This is a new element</Newtag>
</data>
运行结果
修改节点信息
# 修改节点属性
sub1 = root.find("country")
sub1.set("name", "Chinese") # 修改name=chinese
result.write("file.xml") # 写回原文件 # 修改节点值
sub2 = root.find("country")
sub2.find("year").text = "" #修改year的值为2018
result.write("file.xml") # 写回原文件
<data name="ming">
<country name="Chinese">
<rank>4</rank>
<year>2018</year>
<gdppc>59900</gdppc>
<neighbor direction="N" name="Malaysia" />
</country>
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica" />
<neighbor direction="E" name="Colombia" />
</country>
</data>
删除节点
sub3 = root.find("country")
root.remove(sub3)
result.write("file.xml") # 写回原文件
<data name="ming">
<country name="Panama">
<rank>68</rank>
<year>2011</year>
<gdppc>13600</gdppc>
<neighbor direction="W" name="Costa Rica"/>
<neighbor direction="E" name="Colombia"/>
</country>
</data>
运行结果
创建新的XML文件
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017/12/2 0002 14:44
# @Author : ming import xml.etree.ElementTree as ET # 创建一个新的XML文件,根节点为yangyongming
new_xml = ET.Element("yangyongming") # 孩子节点为name,指点父亲节点为new_xml sttrib属性
new_1 = ET.SubElement(new_xml, "name", attrib={"name": "hello"}) # 孙子节点sex 父亲节点new_1
new_s1 = ET.SubElement(new_1, "sex")
# 孙子节点sex 赋值"man"
new_s1.text = "man"
# 孙子节点 age, 父亲节点new_1
new_s2 = ET.SubElement(new_1, "age")
# 孙子节点age 赋值“18”
new_s2.text = "" # 转换为XML文件,写入文件
et = ET.ElementTree(new_xml)
et.write("file.xml", encoding="utf-8")
<yangyongming>
<name name="hello">
<sex>man</sex>
<age>18</age>
</name>
</yangyongming>
运行结果
python xml.etree.ElementTree模块的更多相关文章
- xml.etree.ElementTree模块的封装
转载:https://www.cnblogs.com/hongten/p/hongten_python_xml_etree_elementtree.html 1 # -*- coding: utf-8 ...
- [python 学习] 使用 xml.etree.ElementTree 模块处理 XML
---恢复内容开始--- 导入数据(读文件和读字符串) 本地文件 country_data.xml <?xml version="1.0"?> <data> ...
- python xml.etree ElementTree解析 编辑 xml
python有很多种xml解析方式,不过感觉etree的ElementTree 用起来最方便. #coding=utf-8 from xml.etree import ElementTree impo ...
- python xml.etree.ElementTree解析xml文件获取节点
<?xml version = "1.0" encoding = "utf-8"?> <root> <body name=&quo ...
- Python 标准库之 xml.etree.ElementTree
Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...
- python 之xml.etree.ElementTree
Element类型是一种灵活的容器对象,用于在内存中存储结构化数据. [注意]xml.etree.ElementTree模块在应对恶意结构数据时显得并不安全. 每个element对象都具有以下属性: ...
- python模块:xml.etree.ElementTree
"""Lightweight XML support for Python. XML is an inherently hierarchical data format, ...
- python模块之xml.etree.ElementTree
xml.etree.ElementTree用于解析和构建XML文件 <?xml version="1.0"?> <data> <country nam ...
- python标准库xml.etree.ElementTree的bug
使用python生成或者解析xml的方法用的最多的可能就数python标准库xml.etree.ElementTree和lxml了,在某些环境下使用xml.etree.ElementTree更方便一些 ...
随机推荐
- ucosii笔记(一)
.ucosii是按照优先级高低来切换任务执行顺序的抢占式实时系统. 2.在被高优先级的任务抢占时,这个任务会将寄存器的数据(xPSR.PC.LR.R0.R1.R2.R3.R12等的值)存放在该任务自己 ...
- libgdx学习记录13——矩形CD进度条绘制
利用ShapeRenderer可进行矩形进度条的绘制,多变形的填充等操作. 这是根据角度获取矩形坐标的函数. public Vector2 GetPoint( float x, float y, fl ...
- 使用 vi/vim 时,粘贴进新创建文件或空文件的首行内容丢失的解决方法
只需要进入插入模式后,回车空一行或几行,再粘贴,再把上面的几个空行back回去,就不会丢失首行的内容了.
- laraver框架学习
最近开始学习laravel框架,这个框架在国外很流行,近些年开始在国内流行.自己而是刚开始学习这个框架. 使用composer 更新系统内的依赖包 在终端输入:composer update Entr ...
- java批量爬取电影资源
摘要 网上有很多个人站来分享电影资源,其实有时候我们自己也想做这个一个电影站来分享资源.但是这个时候就有一个问题,电影的资源应该从哪里来呢?难道要自己一条条手动去从网络上获取,这样无疑是缓慢而又效率低 ...
- 前端菜鸟起飞之学会ps切图
由于之前只顾着追求效率,没有学习过PS,但其实这是前端开发人员需要学会的技能之一,曾经看过一个大佬的前端经验分享说他在招聘时遇到不会切图的会直接pass掉,可见前端开发人员学会切图是多么重要.通过观看 ...
- mac10.12.6系统使用cmake安装opencv3.3.0+opencv_contrib-3.3.0
brew与cmake brew安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ins ...
- 3Sum(or k_Sum)
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find ...
- Apache Ignite 学习笔记(一): Ignite介绍、部署安装和REST/SQL客户端使用
Apache Ignite 介绍 Ignite是什么呢?先引用一段官网关于Ignite的描述: Ignite is memory-centric distributed database, cachi ...
- 人类又被AI碾压,这次是星际争霸
还记得2017年,那个血洗围棋界的“阿尔法狗”吗? 这个由谷歌旗下 DeepMind 公司开发的 AI ,对阵世界顶尖围棋选手,打出完全碾压式的战绩: AlphaGo vs. 樊麾 - 5 : ...