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进行一些简单的自然语言处理的教程
Mar 31 Python
python递归查询菜单并转换成json实例
Mar 27 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
在双python下设置python3为默认的方法
Oct 31 Python
使用python判断你是青少年还是老年人
Nov 29 Python
django重新生成数据库中的某张表方法
Aug 28 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
基于python实现把图片转换成素描
Nov 13 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
python利用线程实现多任务
Sep 18 Python
python 如何区分return和yield
Sep 22 Python
python 实现弹球游戏的示例代码
Nov 17 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
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
jQuery 使用个人心得
2009/02/26 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
JSON相关知识汇总
2015/07/03 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
python实现封装得到virustotal扫描结果
2014/10/05 Python
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
opencv 阈值分割的具体使用
2020/07/08 Python
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
劳动模范事迹材料
2014/01/19 职场文书
消防应急演练方案
2014/02/12 职场文书
空气的环保标语
2014/06/12 职场文书
主题团日活动总结
2014/06/25 职场文书
诚实守信演讲稿
2014/09/01 职场文书
授权收款委托书
2014/09/23 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
欠条格式范本
2015/07/03 职场文书
中学校园广播稿
2015/08/18 职场文书