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中使用OpenCV进行人脸检测的例子
Apr 18 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
老生常谈python之鸭子类和多态
Jun 13 Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 Python
Python字符串拼接六种方法介绍
Dec 18 Python
python爬虫爬取网页表格数据
Mar 07 Python
python版opencv摄像头人脸实时检测方法
Aug 03 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
python学习将数据写入文件并保存方法
Jun 07 Python
Python偏函数实现原理及应用
Nov 20 Python
python 获取谷歌浏览器保存的密码
Jan 06 Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 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将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
9个比较实用的php代码片段
2016/03/15 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
php微信公众号开发模式详解
2016/11/28 PHP
js以对象为索引的关联数组
2010/07/04 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
node.js中的fs.readSync方法使用说明
2014/12/17 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
Python自定义一个异常类的方法
2019/06/27 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
升职自荐书范文
2013/11/28 职场文书
中国梦的演讲稿
2014/01/08 职场文书
端午节活动策划方案
2014/03/09 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
考试作弊检讨
2015/01/27 职场文书