python模块之xml.etree.ElementTree
xml.etree.ElementTree用于解析和构建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>
解析XML文件
parse()函数,从xml文件返回ElementTree
from xml.etree.ElementTree import parse
tree = parse('demo.xml') //获取ElementTree
root = tree.getroot() // 获取根元素
Element.tag 、Element.attrib、Element.text
In [6]: root.tag
Out[6]: 'data' In [7]: root.attrib
Out[7]: {} In [25]: root.text
Out[25]: '\n '
for child in root 迭代获得子元素
In [8]: for child in root:
...: print(child.tag, child.attrib)
...:
country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}
Element.get() 获得属性值
In [27]: for child in root:
...: print (child.tag, child.get('name'))
...:
country Liechtenstein
country Singapore
country Panama
root.getchildren() 获得直接子元素
In [21]: root.getchildren()
Out[21]:
[<Element 'country' at 0x7f673581c728>,
<Element 'country' at 0x7f673581ca98>,
<Element 'country' at 0x7f673581cc28>]
root[0][1] 根据索引查找子元素
In [9]: root[0][1].text
Out[9]: '2008' In [10]: root[1][0].text
Out[10]: '4'
root.find() 根据tag查找直接子元素,返回查到的第一个元素
In [13]: root.find('country').attrib
Out[13]: {'name': 'Liechtenstein'}
root.findall() 根据tag查找直接子元素,返回查到的所有元素的列表
In [16]: for country in root.findall('country'):
...: print (country.attrib)
...:
{'name': 'Liechtenstein'}
{'name': 'Singapore'}
{'name': 'Panama'}
root.iterfind() 根据tag查找直接子元素,返回查到的所有元素的生成器
In [22]: root.iterfind('country')
Out[22]: <generator object prepare_child.<locals>.select at 0x7f6736dccfc0>
支持的XPath语句(XML Path)
In [19]: root.findall('.//rank') //查找任意层次元素
Out[19]:
[<Element 'rank' at 0x7f673581c8b8>,
<Element 'rank' at 0x7f673581c6d8>,
<Element 'rank' at 0x7f673581cc78>]
In [32]: root.findall('country/*') //查找孙子节点元素
Out[32]:
[<Element 'rank' at 0x7f673581c8b8>,
<Element 'year' at 0x7f673581cbd8>,
<Element 'gdppc' at 0x7f673581c958>,
<Element 'neighbor' at 0x7f673581c688>,
<Element 'neighbor' at 0x7f673581cb38>,
<Element 'rank' at 0x7f673581c6d8>,
<Element 'year' at 0x7f673581c5e8>,
<Element 'gdppc' at 0x7f673581c868>,
<Element 'neighbor' at 0x7f673581cb88>,
<Element 'rank' at 0x7f673581cc78>,
<Element 'year' at 0x7f673581ccc8>,
<Element 'gdppc' at 0x7f673581cd18>,
<Element 'neighbor' at 0x7f673581cd68>,
<Element 'neighbor' at 0x7f673581cdb8>]
In [33]: root.findall('.//rank/..') // ..表示父元素
Out[33]:
[<Element 'country' at 0x7f673581c728>,
<Element 'country' at 0x7f673581ca98>,
<Element 'country' at 0x7f673581cc28>]
In [34]: root.findall('country[@name]') // 包含name属性的country
Out[34]:
[<Element 'country' at 0x7f673581c728>,
<Element 'country' at 0x7f673581ca98>,
<Element 'country' at 0x7f673581cc28>]
In [35]: root.findall('country[@name="Singapore"]') // name属性为Singapore的country
Out[35]: [<Element 'country' at 0x7f673581ca98>]
In [36]: root.findall('country[rank]') // 孩子元素中包含rank的country
Out[36]:
[<Element 'country' at 0x7f673581c728>,
<Element 'country' at 0x7f673581ca98>,
<Element 'country' at 0x7f673581cc28>]
In [37]: root.findall('country[rank="68"]') // 孩子元素中包含rank且rank元素的text为68的country
Out[37]: [<Element 'country' at 0x7f673581cc28>]
In [38]: root.findall('country[1]') // 第一个country
Out[38]: [<Element 'country' at 0x7f673581c728>]
In [39]: root.findall('country[last()]') // 最后一个country
Out[39]: [<Element 'country' at 0x7f673581cc28>]
In [40]: root.findall('country[last()-1]') // 倒数第二个country
Out[40]: [<Element 'country' at 0x7f673581ca98>]
root.iter() 递归查询指定的或所有子元素
In [29]: root.iter()
Out[29]: <_elementtree._element_iterator at 0x7f67355dd728> In [30]: list(root.iter())
Out[30]:
[<Element 'data' at 0x7f673581c778>,
<Element 'country' at 0x7f673581c728>,
<Element 'rank' at 0x7f673581c8b8>,
<Element 'year' at 0x7f673581cbd8>,
<Element 'gdppc' at 0x7f673581c958>,
<Element 'neighbor' at 0x7f673581c688>,
<Element 'neighbor' at 0x7f673581cb38>,
<Element 'country' at 0x7f673581ca98>,
<Element 'rank' at 0x7f673581c6d8>,
<Element 'year' at 0x7f673581c5e8>,
<Element 'gdppc' at 0x7f673581c868>,
<Element 'neighbor' at 0x7f673581cb88>,
<Element 'country' at 0x7f673581cc28>,
<Element 'rank' at 0x7f673581cc78>,
<Element 'year' at 0x7f673581ccc8>,
<Element 'gdppc' at 0x7f673581cd18>,
<Element 'neighbor' at 0x7f673581cd68>,
<Element 'neighbor' at 0x7f673581cdb8>] In [31]: list(root.iter('rank'))
Out[31]:
[<Element 'rank' at 0x7f673581c8b8>,
<Element 'rank' at 0x7f673581c6d8>,
<Element 'rank' at 0x7f673581cc78>]
python模块之xml.etree.ElementTree的更多相关文章
- python模块:xml.etree.ElementTree
"""Lightweight XML support for Python. XML is an inherently hierarchical data format, ...
- python标准库xml.etree.ElementTree的bug
使用python生成或者解析xml的方法用的最多的可能就数python标准库xml.etree.ElementTree和lxml了,在某些环境下使用xml.etree.ElementTree更方便一些 ...
- [python 学习] 使用 xml.etree.ElementTree 模块处理 XML
---恢复内容开始--- 导入数据(读文件和读字符串) 本地文件 country_data.xml <?xml version="1.0"?> <data> ...
- [python 2.x] xml.etree.ElementTree module
XML 文件:xmlparse.xml <?xml version="1.0" encoding="UTF-8" standalone="no& ...
- Python 标准库之 xml.etree.ElementTree
Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...
- python 之xml.etree.ElementTree
Element类型是一种灵活的容器对象,用于在内存中存储结构化数据. [注意]xml.etree.ElementTree模块在应对恶意结构数据时显得并不安全. 每个element对象都具有以下属性: ...
- python解析xml文件之xml.etree.cElementTree和xml.etree.ElementTree区别和基本使用
1.解析速度:ElementTree在 Python 标准库中有两种实现.一种是纯 Python 实现例如 xml.etree.ElementTree ,另外一种是速度快一点的 xml.etree.c ...
- python xml.etree.ElementTree模块
使用的XML文件如下:file.xml <?xml version="1.0"?> <data name="ming"> <cou ...
- python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 4, column 34
在调试数字驱动用xml文件的方式时,包含读取xml文件的步骤,运行程序报错: d:\test\0629>python XmlUtil.pyTraceback (most recent call ...
随机推荐
- 《Node入门》读书笔记——用Node.js开发一个小应用
Android APP的开发告一段落,一个稳定的.实现了基本功能的APP已经交付用户使用了!我和老板交流了下,接下来准备转战Node.js了,而且一部分前端的功能也要做进去!哈哈哈~~~接下来要朝一个 ...
- Oracle 高性能SQL引擎剖析----执行计划
执行计划是指示Oracle如何获取和过滤数据.产生最终结果集,是影响SQL语句执行性能的关键因素.我们在深入了解执行计划之前,首先需要知道执行计划是在什么时候产生的,以及如何让SQL引擎为语句生成执行 ...
- innodb--表空间
MySQL把数据库中表结构的定义信息保存到数据库目录的.frm文件中. 在InnoDB中数据库中存储的数据及索引实际是存放在表空间里的(tablespace). 可以将每个基于InnoDB存储引擎的表 ...
- bzoj3748 Kwadraty
Claris 当然是要用来%的 但是,,其他dalao,,比如JL的红太阳commonc.题解能不能稍微加几句话,蒟蒻看不懂啊. 在这里解释一下,Claris的题解.(因为我弱,想了半天才明白,所以觉 ...
- 孙鑫视频VC++深入详解学习笔记
孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Le ...
- C++ string的那些坑
1. size_type find_first_of( const basic_string &str, size_type index = 0 ); 查找在字符串中第一个与str中的某个字符 ...
- TestNG指南
转载自:http://blog.csdn.net/bigapplestar/article/details/7300137 今天突然收到通知,统一改用TestNG写测试用例,开始查这方面的资料,学习一 ...
- [Luogu 2023] AHOI2009 维护序列
[Luogu 2023] AHOI2009 维护序列 恕我冒昧这和线段树模板二有个琴梨区别? #include <cstdio> int n,m; long long p; class S ...
- jQuery.fill 数据填充插件
博客园的伙伴们,大家好,I'm here,前段时间特别的忙,只有零星分散的时间碎片,有时仰望天空,有时发呆,有时写代码,正如下面给大家介绍的这个jQuery.fill插件,正是在这样的状态下写出来的. ...
- centos下搭建YII环境
第一步:安装lnmp wget -c http://soft.vpser.net/lnmp/lnmp1.4-full.tar.gz 下载完lnmp后,进行解压文档 tar zxf lnmp1.4- ...