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迭代器实例简析
Sep 25 Python
Python中的下划线详解
Jun 24 Python
python友情链接检查方法
Jul 08 Python
Python 迭代器工具包【推荐】
May 06 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
python xlsxwriter创建excel图表的方法
Jun 11 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
Python如何在windows环境安装pip及rarfile
Jun 15 Python
python 利用opencv实现图像网络传输
Nov 12 Python
python中封包建立过程实例
Feb 18 Python
深入理解Pytorch微调torchvision模型
Nov 11 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中SESSION使用中的一点经验总结
2012/03/30 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
php中文验证码实现方法
2015/06/18 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
分页栏的web标准实现
2011/11/01 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
python爬取网站数据保存使用的方法
2013/11/20 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Django工程的分层结构详解
2019/07/18 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
化学相关工作求职信
2013/10/02 职场文书
生产管理的三大手法
2013/11/11 职场文书
初中女生自我鉴定
2013/12/19 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
导游词格式
2015/02/13 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
班委竞选稿范文
2015/11/21 职场文书
Python 绘制多因子柱状图
2022/05/11 Python