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多线程结合队列下载百度音乐的方法
Jul 27 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
老生常谈python中的重载
Nov 11 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
详细介绍Python进度条tqdm的使用
Jul 31 Python
python实现多进程通信实例分析
Sep 01 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
Dec 27 Python
浅谈python 调用open()打开文件时路径出错的原因
Jun 05 Python
python的launcher用法知识点总结
Aug 07 Python
Python Merge函数原理及用法解析
Sep 16 Python
Python如何实现感知器的逻辑电路
Dec 25 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分页显示制作详细讲解
2008/11/19 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
python爬取音频下载的示例代码
2020/10/19 Python
python cookie反爬处理的实现
2020/11/01 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
校园达人秀策划书
2014/01/12 职场文书
四查四看整改措施
2014/09/19 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
2015年材料员工作总结
2015/04/30 职场文书
民事起诉书范本
2015/05/19 职场文书
Django框架中表单的用法
2022/06/10 Python