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 ...
随机推荐
- 详解SQL Server数据修复命令DBCC的使用
严重级别为 21 表示可能存在数据损坏. 可能的原因包括损坏的页链.损坏的 IAM 或该对象的 sys.objects目录视图中存在无效条目. 这些错误通常由硬件或磁盘设备驱动程序故障而引起. MS ...
- [您有新的未分配科技点]博弈论进阶:似乎不那么恐惧了…… (SJ定理,简单的基础模型)
这次,我们来继续学习博弈论的知识.今天我们会学习更多的基础模型,以及SJ定理的应用. 首先,我们来看博弈论在DAG上的应用.首先来看一个小例子:在一个有向无环图中,有一个棋子从某一个点开始一直向它的出 ...
- Mybatis笔记五:Mybatis的全局配置文件Configuration.xml讲解
从 XML 中构建 SqlSessionFactory 每个基于Mybatis应用都是以一个SqlSessionFactory实例为中心.SqlSessionFactory实例可以由SqlSessio ...
- 【JavaScript】离线应用与客户端存储
一.前言 这章非常重要,由于之后需要负责平台手机APP的日后维护,如何让用户在离线状态下正常使用,以及联网后的数据合并变得非常重要. 二.内容 离线检测 navigator ...
- 框架----Django之ModelForm组件
ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提示信 ...
- Web前端之HTML详解20180327
一.html概述 html就是超文本标记语言的简写,是最基础的网页语言.html通过标签来定义语言,代码都是由标签所组成. 1.html代码从<html>开始</html>结束 ...
- Spring MVC POJO传参方式
有两POJO类 Address.java package com.proc; public class Address { private String province; private Strin ...
- UESTC--1300
原题链接:http://acm.uestc.edu.cn/problem.php?pid=1300 分析:dp,最长公共上升子列.对于两个序列num1[maxn],num2[maxn]: 如果num1 ...
- springMVC的controller返回值
1.可以返回ModelAndView 2.可以返回一个String字符串:即一个jsp页面的逻辑视图名,这个在springMVC.xml中可以配置此页面逻辑视图的前缀和后缀 3.可以返回void类型: ...
- ArrayList和Array区别
1)精辟阐述:可以将 ArrayList想象成一种“会自动扩增容量的Array”. 2)Array([]):最高效:但是其容量固定且无法动态改变: ArrayList: 容量可动态增长:但牺 ...