python标准库ElementTree处理xml


Posted in Python onMay 20, 2022

1. 示例用法

参照官方文档,创建country_data.xml测试文档,内容如下:

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <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>

使用如下代码,将数据读出,打印

from xml.etree.ElementTree 
data = ElementTree.ElementTree(file='country_data.xml')
country_list = data.findall('country')   #找到所有名为‘country'的tag,返回一个Element对象列表。
for country in country_list:
    name = country.attrib.get('name', '') 
    print name, ' ', 
    for item in country:
        if item.tag == 'neighbor':
            name = item.attrib.get('name', '') 
            direction = item.attrib.get('direction', '') 
            print '{0} ({1})'.format(name, direction), ' ',
        else:
            print item.text, ' ',
    print ''

其中

data = ElementTree.ElementTree(file='country_data.xml')

获得一个ElementTree对象,也可以使用

tree = ElementTree.parse('country_data.xml')

Element对象具有如下属性和操作

elem.tag 这个Element对象的名字(tag)
elem.text 文档内容
elem.attrib 属性值字典
elem.tail 与属性一起存储的其他数据

elem[n] 返回elem的第n个子元素

elem[n] = new_elem 将elem的第n个子元素更改为不同的元素new_elem

del elem[n] 删除子元素

len(elem) 子元素的数量

elem.find(path)

elem.getchildren() 按文档顺序返回所有子元素

elem.items()将所有元素的属性值以(name, value)对列表形式返回

遇到非法格式的xml

ExpatError: no element found

bad.xml为空文档时,内容如下:

<?xml version="1.0"?>

执行如下python代码,遇到xml.parser.expat.ExpatError异常:

import xml.etree.ElementTree as ET
ET.parse('bad.xml')

xml.parsers.expat.ExpatError: no element found: line 3, column 0

ExpatError: mismatched tag

bad.xml中找不到对应结束标记符时,内容如下:

<?xml version="1.0"?>
<note>
</Note>

因为区分大小写,所以</Note> 不能作为<note>的结束标记。

xml.parsers.expat.ExpatError: mismatched tag: line 3, column 2

ExpatError: not well-formed(invalid token)

bad.xml中属性值未包含在双引号(&quot;)之中时,遇到如下异常:

<?xml version="1.0"?>
<note id=hello>
</note>

bad.xml中非法符号,在"if salary < 1000 then"语句的‘<',如下:

<?xml version="1.0"?>
<note id="hello">
if salary < 1000 then
</note

xml.parsers.expat.ExpatError: not well-formed (invalid token): line 2, column 9

以上就是python标准库ElementTree处理xml的详细内容!


Tags in this post...

Python 相关文章推荐
使用Python判断IP地址合法性的方法实例
Mar 13 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
python使用标准库根据进程名如何获取进程的pid详解
Oct 31 Python
使用python根据端口号关闭进程的方法
Nov 06 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
12个步骤教你理解Python装饰器
Jul 01 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
python批量处理文件或文件夹
Jul 28 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 Python
python文件及目录操作代码汇总
Jul 08 Python
解决python便携版无法直接运行py文件的问题
Sep 01 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
May 20 #Python
Python Flask实现进度条
May 11 #Python
Python PIL按比例裁剪图片
May 11 #Python
python 学习GCN图卷积神经网络
May 11 #Python
Python+Pillow+Pytesseract实现验证码识别
May 11 #Python
Python 绘制多因子柱状图
PyCharm 配置SSH和SFTP连接远程服务器
May 11 #Python
You might like
PHP和.net中des加解密的实现方法
2013/02/27 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
php实现图片压缩处理
2020/09/09 PHP
Mootools 1.2教程 输入过滤第二部分(字符串)
2009/09/15 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
2011/08/23 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
Python 日期与时间转换的方法
2020/08/01 Python
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
Python如何实现单例模式
2016/06/03 面试题
员工拾金不昧表扬信
2014/01/09 职场文书
人民教师求职自荐信
2014/03/12 职场文书
师德师风承诺书
2014/05/23 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
受资助学生感谢信
2015/01/21 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书