xml.etree.ElementTree — The ElementTree XML API 中文翻译
来源:互联网 发布:湘南学院网络教学平台 编辑:程序博客网 时间:2024/06/05 05:51
Python:2.7.8
源码地址:Lib/xml/etree/ElementTree.py
鄙人英文水平有限,若您对文中描述有异议,请以原文为准。
Element是一种灵活的容器对象,用于在内存中储存分层数据结构。你可以想象它是字典和列表的交集。
警告:xml.etree.ElementTree在处理恶意构造的数据时是不安全的。如果你需要处理不可信或未验证的数据,请查看 XML vulnerabilities。
元素(element)拥有若干相关的属性:
1、标签(tag),用于标识元素中的数据代表着什么的字符串;
2、属性(attributes),储存在Python字典里;
3、文本内容;
4,可选的尾字符串;
5,若干子元素,储存才Python序列里;
创建element实例,可使用Element构造函数,或者使用内建函数SubElement()。
ElementTree类用于将element打包为XML文件,或从XML文件中读取element。
1.1. XML树和元素
XML是一种可继承的,分层的的数据格式,为了更好的理解它,你可以想想“树”的结构。xml.etree下面有两个类,第一个是ElementTree类,用于将整个XML文件抽象为树,Element代表着树上的一个节点。总的来说,如果要操作整个文件,使用ElementTree类,如果操作节点,使用Element类。
1.2. 导入XML
这节的示例代码,将使用下面这个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>有很多方法可以导入这个文件:
& 从硬盘中导入:
import xml.etree.ElementTree as ETtree = ET.parse('country_data.xml')root = tree.getroot()
&从字符串中导入:
root = ET.fromstring(country_data_as_string)
fromstring() 直接将xml从字符串中导入到Element类中,并且返回的是根节点(root element)。其他的导入方法则返回ElementTree。
root是Element的实例,所以它拥有标签和用字典储存的属性:
>>> root.tag'data'>>> root.attrib{}root也拥有可迭代的子节点:
>>> for child in root:... print child.tag, child.attrib...country {'name': 'Liechtenstein'}country {'name': 'Singapore'}country {'name': 'Panama'}也可以使用索引来访问子节点:
>>> root[0][1].text'2008'
1.3. 寻找节点
Element拥有一些方法,用来递归遍历元素。比如:
Element.iter():
>>> for neighbor in root.iter('neighbor'):... print neighbor.attrib...{'name': 'Austria', 'direction': 'E'}{'name': 'Switzerland', 'direction': 'W'}{'name': 'Malaysia', 'direction': 'N'}{'name': 'Costa Rica', 'direction': 'W'}{'name': 'Colombia', 'direction': 'E'}
Element.find(),和findall()类似,但只找第一个符合条件的。
示例代码中出现的Element.text用来获得元素的文本内容,Element.get()用来获得元素的属性
>>> for country in root.findall('country'):... rank = country.find('rank').text... name = country.get('name')... print name, rank...Liechtenstein 1Singapore 4Panama 68学习更多高级用法,请看XPath。
1.4.修改XML文件
ElementTree提供了简单的方式用来创建XML文档,并将它保存到文件中。使用ElementTree.write()即可。
Element对象中,可直接修改他的字段(Element.text),可加入或修改属性(Element.set()),新增子元素(Element.append())
运行下面的示例代码,将给每个国家的rank加1,并且为rank元素添加‘updated’属性:
>>> for rank in root.iter('rank'):... new_rank = int(rank.text) + 1... rank.text = str(new_rank)... rank.set('updated', 'yes')...>>> tree.write('output.xml')运行效果:
<?xml version="1.0"?><data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> <neighbor name="Colombia" direction="E"/> </country></data>
删除节点使用Element.remove(),下面示例代码的作用是:删除所有rank大于50的国家:
>>> for country in root.findall('country'):... rank = int(country.find('rank').text)... if rank > 50:... root.remove(country)...>>> tree.write('output.xml')
运行效果:
<?xml version="1.0"?><data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country></data>
1.5.1 建立XML文档
使用SubElement()方法添加子元素是很方便的:
>>> a = ET.Element('a')>>> b = ET.SubElement(a, 'b')>>> c = ET.SubElement(a, 'c')>>> d = ET.SubElement(c, 'd')>>> ET.dump(a)<a><b /><c><d /></c></a>
0 0
- xml.etree.ElementTree — The ElementTree XML API 中文翻译
- 19.5. xml.etree.ElementTree — The ElementTree XML API
- xml.etree.ElementTree — The ElementTree XML API
- xml.etree.ElementTree — The ElementTree XML API
- xml.etree.ElementTree — The ElementTree XML API(1)
- xml.etree.ElementTree
- xml.etree.ElementTree 使用
- python xml.etree.ElementTree解析
- Python xml.etree.ElementTree 用法
- python xml.etree ElementTree解析 编辑 xml
- 使用xml.etree.ElementTree读xml
- [Python]xml.etree.ElementTree处理xml文档
- python XML解析--xml.etree.ElementTree
- python-xml.etree.ElementTree解析xml文件
- python模块之xml.etree.ElementTree
- Python标准库之xml.etree.ElementTree
- Python模块学习之xml.etree.ElementTree
- Python标准库之xml.etree.ElementTree
- SVN与TortoiseSVN修改日志和强制写日志实现详解
- 数据分析、数据挖掘、数据统计、OLAP 之间的差异是什么?-- 孙文亮
- jscriptbug
- java 单例模式的优化
- 产品入门
- xml.etree.ElementTree — The ElementTree XML API 中文翻译
- virtualization - memory and device I/O virtualization
- R语言中的数据列表
- MFC复习和学习 第八章 MFC映射 MFC文件 MFC文件查找 序列化
- 数据挖掘-公司别名聚合(四)
- 合成的默认构造函数
- javaweb 项目开发顺序
- 踏得网Web工程师技能图(Skills Graph)HTML5 示范
- java核心之泛型(三)约束