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设计实现的计算器功能完整实例
Aug 18 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
python+pandas+时间、日期以及时间序列处理方法
Jul 10 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
利用Python实现kNN算法的代码
Aug 16 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
python的slice notation的特殊用法详解
Dec 27 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
解决python运行效率不高的问题
Jul 20 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 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 多个submit提交表单 处理方法
2009/07/07 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
javascript 原型继承介绍
2011/08/30 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
Python 实现一个简单的web服务器
2021/01/03 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
介绍一下.net和Java的特点和区别
2012/09/26 面试题
高分子材料个人求职信范文
2013/09/25 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
寒假家长评语大全
2014/04/16 职场文书
综治宣传月活动总结
2014/04/28 职场文书
数据保密承诺书
2014/06/03 职场文书
报效祖国演讲稿
2014/09/15 职场文书
建设工程授权委托书
2014/09/22 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
幼师个人总结范文
2015/02/28 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python