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之Import 模块
Oct 13 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
Python set常用操作函数集锦
Nov 15 Python
pygame游戏之旅 创建游戏窗口界面
Nov 20 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
Apr 01 Python
Python远程视频监控程序的实例代码
May 05 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
python 实现二维列表转置
Dec 02 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
pandas中DataFrame检测重复值的实现
May 26 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
七款最流行的PHP本地服务器分享
2013/02/19 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
select组合框option的捕捉实例代码
2008/09/30 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
jQuery图片轮播的具体实现
2013/09/11 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
python抓取网页中链接的静态图片
2018/01/29 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
普通员工辞职信
2014/01/17 职场文书
教师产假请假条
2014/04/10 职场文书
大学生心理活动总结
2014/07/04 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
小学教师年度个人总结
2015/02/05 职场文书
生活小常识广播稿
2015/08/19 职场文书
如何理解PHP核心特性命名空间
2021/05/28 PHP