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基于phantomjs实现导入图片
May 13 Python
Python 数据结构之队列的实现
Jan 22 Python
Python探索之URL Dispatcher实例详解
Oct 28 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
python中for用来遍历range函数的方法
Jun 08 Python
Python的高阶函数用法实例分析
Apr 11 Python
详解Python字符串切片
May 20 Python
Python循环结构的应用场景详解
Jul 11 Python
Python图像处理PIL各模块详细介绍(推荐)
Jul 17 Python
Python turtle绘画象棋棋盘
Aug 21 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
基于python检查SSL证书到期情况代码实例
Apr 04 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
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
详解Python中的join()函数的用法
2015/04/07 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
python实现的config文件读写功能示例
2019/09/24 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
幼师求职自荐信范文
2014/01/26 职场文书
先进事迹材料范文
2014/12/29 职场文书
大学生毕业个人总结
2015/02/15 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
python实现监听键盘
2021/04/26 Python
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers