概述

参考elementTree的官方文档,ET 模块可以归纳为三个部分:ElementTree类,Element类以及一些操作 XML 的函数。  XML是一种固有的分层数据格式,表示它的最自然的方式是使用树。 ET为此目的有两个类 - ElementTree将整个XML文档表示为树,并 Element表示此树中的单个节点。与整个文档的交互(读取和写入文件)通常在ElementTree关卡上完成。与单个XML元素及其子元素的交互在该Element级别上完成。

XML中结点结构一般为:<tag attrib>text</tag>的形式

        <tag attrib="attrib">text</tag>

1.解析XML文件

ET模块支持从一个XML文件构造成一个ElementTree对象,以下以官方文档中给出的country.xml为例进行接收

<?xml version="1.0" encoding="utf-8"?>
<data><country1 name="Liechtenstein"><rank>1</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country1><country2 name="中国"><rank>68</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="赵三" direction="西边"/><neighbor name="李四" direction="东北"/></country2>
</data>

使用ET模块中的parse()函数构造一个ElementTree对象,如下所示:

#-*-encoding:utf-8-*-import xml.etree.ElementTree as ET# 获取 XML 文档对象 ElementTree
tree = ET.parse('coutry.xml')# 获取 XML 文档对象的根结点 Element
root = tree.getroot()
# 打印根结点的名称
print "tag:",root.tag

2.XML中查找结点信息

XML中可以使用三种方式进行查找,分别是find(),findall(),iter()的方式,下面通过实例进行介绍

1.find()方法和findall()

如果使用Element.findall()或者Element.find()方法,则只会从结点的直接子结点中查找,并不会递归查找。

for country in root.findall('country1'):rank = country.find('rank').textname = country.get('name')print name, rank

关于find()和findall()方法,可以参考一篇窃以为不错的博客。

2.iter()

鉴于find()和findall()的缺点,自己较喜欢的使用iter()方法。

import xml.etree.ElementTree as ET# 获取 XML 文档对象 ElementTree
tree = ET.parse('coutry.xml')# 获取 XML 文档对象的根结点 Element
root = tree.getroot()
#使用iter查找并打印结点信息
for index in root.iter("year2"):print "index.tag",index.tag

3.修改更新结点

结点的更新涉及到属性更新,值的更新。如果更新属性使用,修改Element.attrib进行修改;如果更新值使用Element.text更新,注意这里的值的更新,如果是数字类型,变化的时候需要需要先转换成int,再转换成str类型进行赋值。那更新后一般需要写入原来的文件中,此时需要使用ElementTree.write()方法写入到XML文件中,如下所示:

#-*- coding:utf-8 -*-import xml.etree.ElementTree as ET# 获取 XML 文档对象 ElementTree
tree = ET.parse('coutry.xml')# 获取 XML 文档对象的根结点 Element
root = tree.getroot()for index in root.iter("year2"):print "index.text", index.textindex.text = str(int(index.text) + 1)print "index.text", index.texttree.write("countryResult.xml",encoding="UTF-8")

注意:这里编码格式要使用“UTF-8”,如果使用的是"utf-8"保存后出现没有头部

<?xml version="1.0" encoding="utf-8"?>

的情况

python中使用ElementTree 操作XML相关推荐

  1. python 中使用ElementTree操作XML

    概述 对比其他 Python 处理 XML 的方案,xml.etree.ElementTree 模块(下文我们以 ET 来表示)相对来说比较简单,接口也较友好. 官方文档 里面对 ET 模块进行了较为 ...

  2. Python中使用ElementTree解析xml

    在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...

  3. python解析xml文件elementtree_在python中使用ElementTree解析xml文件

    ElementTree是python自带的处理xml格式文件的模块,位于libxmletreeElementTree.py.这个模块有两个基本概念:Element和ElementTree. 表示整个树 ...

  4. python解析xml文件elementtree_Python中使用ElementTree解析XML示例

    [XML基本概念介绍] XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. 概念一: 复制代码 代码如下: # foo元素的起始标签 ...

  5. python elementtree乱码_Python中使用ElementTree解析xml

    在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...

  6. 面试官问我:如何在 Python 中解析和修改 XML

    摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...

  7. python中的日志操作和发送邮件

    1.python中的日志操作 安装log模块:pip install nnlog 参数:my_log = nnlog.Logger('server_log.log',level='debug',bac ...

  8. python中二进制文件_Python学习基础篇 -6: Python中的文件操作

    前言:本专栏以Python为主题,并尽可能保持每星期两到三更,直到将Python的基础知识浅析和讲解完毕,同时,有一定基础的同学可以移步 Python实战专栏 . 文件有有什么用 文件可以看作一个仓库 ...

  9. Python中的字符串操作总结(Python3.6.1版本)

    Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...

最新文章

  1. 驾驶员行为监控系统:需要它来管理车队
  2. .NET Compact Framework下的蓝牙开发
  3. TCP/IP详解--第九章
  4. iptables_默认规则
  5. 索尼笔记本bios如何设置VT-x/AMD-V兼容
  6. pivotal_Spring Data Pivotal Gemfire教程
  7. 在InternetExplorer.Application中显示本地图片
  8. MySQL查询表的所有列名,用逗号拼接
  9. 手机屏幕宽高像素计算_国内手机厂商纷纷支持,三星传感器终成正果!索尼还能雄起吗?...
  10. [FFmpeg] 绘制矩形框
  11. python爬虫-Python 爬虫介绍
  12. 【OpenCV入门指南】第八篇 灰度直方图
  13. 指向函数的指针和block
  14. 多元函数法曲率和主曲率的几何解释
  15. 首次登录强制修改密码
  16. 技术人员谈管理之帕累托法则(80/20法则)
  17. C# 在获得鼠标点击事件时,如何判断Control键,Shift键被按下
  18. yolov5_trt_web检索衣服图案
  19. Netbeans设置语言为英文
  20. 使用线性SVM实现对垃圾邮件分类

热门文章

  1. 缓存设计--读写锁场景实现
  2. AS打开速度慢,AS项目导入慢,新建项目导入慢
  3. Javascript操作DOM常用API总结
  4. vim常用命令总结 (转)
  5. 内网能PING通TELNET通不能访问解决
  6. mongodb简介、安装、启停(转并学习)
  7. castle 组件化开发应用配制示例
  8. Vs2010与VC的区别
  9. python中pos()_python中不带NLTK的POS标记器
  10. 现代密码学5.4--对哈希函数的攻击