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中的算数运算符的用法
May 13 Python
Flask框架的学习指南之开发环境搭建
Nov 20 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
如何优雅地改进Django中的模板碎片缓存详解
Jul 04 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
Feb 26 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 Python
Python实现寻找回文数字过程解析
Jun 09 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 Python
python flappy bird小游戏分步实现流程
Feb 15 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中对数据库操作的封装
2006/10/09 PHP
php预定义常量
2006/12/25 PHP
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
js 自定义个性下拉选择框示例
2013/08/20 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
python购物车程序简单代码
2018/04/18 Python
flask session组件的使用示例
2018/12/25 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
创业计划书的写作技巧及要点
2014/01/31 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
服务员岗位职责
2015/02/03 职场文书
销售口号霸气押韵
2015/12/24 职场文书
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python