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程序语言快速上手教程
Jul 18 Python
Python中使用strip()方法删除字符串中空格的教程
May 20 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
解决pycharm运行时interpreter为空的问题
Oct 29 Python
python绘制散点图并标记序号的方法
Dec 11 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
python 穷举指定长度的密码例子
Apr 02 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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实现股票趋势图和柱形图
2015/02/07 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
javascript中的正则表达式使用详解
2015/08/30 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
Angular的$http与$location
2016/12/26 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
用python写的一个wordpress的采集程序
2016/02/27 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
自主招生自荐信格式
2013/12/03 职场文书
教师应聘个人求职信
2013/12/10 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
党员身份证明材料
2015/06/19 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书