该文章为笔者查看官方文档,并结合阅读网上博客自己归纳总结的一些心得,必然会有不足甚至错误的地方,若发现或有什么建议请及时评论提示!
xml.etree.ElementTree模块定义了一个灵活的容器对象Element,用于存储和操作分层数据。
每个element对象都具有以下属性:
1、tag,string类型,表示数据代表的种类;
2、attributes,字典类型,表示附有的属性;
3、text,string类型,表示Element的内容;
4、tail,string类型,表示Element闭合之后的尾迹;
5、若干子元素
比如:<tag attribute=1>text:content</tag>tail
1 2 3 4
初步了解之后我们开始学习下该模块的应用,首先我们来一个xml文件(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>
导入ElementTree:
只需:importxml.etree.ElementTreeasET
若想加快速度,可以使用C语言编译的API xml.etree.cElementTree
所以我们导入时可以这样导入:
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
一、创建Element对象
接下来加载数据:
tree = ET.parse("country_data.xml")
root = tree.getroot()
获取到root后,访问一些它的属性:
root.tag >>>data
root.attrib >>> {}
也可以遍历它的子节点:
for child in root:
print child.tag,child.attrib
>>>
country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}
我们同样可以根据索引来指定特定的子节点:
root[0][1].text >>> 2008 #我们就获取了根路劲下第一个子节点的第二个子节点的text属性2008
Element还有一些实用的方法可以快速查找:
Element.iter()
for neighbor in root.iter('neighbor'):
print neighbor.attrib
>>>
{'direction': 'E', 'name': 'Austria'}
{'direction': 'W', 'name': 'Switzerland'}
{'direction': 'N', 'name': 'Malaysia'}
{'direction': 'W', 'name': 'Costa Rica'}
{'direction': 'E', 'name': 'Colombia'}
Element.findall()查找树结构中匹配给指定路径的所有顶层元素,返回列表或迭代程序
for country in root.findall("country"):
print country.find("rank").text
print country.get("name")
>>>
1
Liechtenstein
4
Singapore
68
Panama
更多实用函数查看官方文档https://docs.python.org/2/library/xml.etree.elementtree.html#elementtree-xpath
二、创建元素
Comment([text])新建注意元素,就是说映射到xml文件时将创建注释信息;
Element(tag)新建元素,tag为元素的名称,还可以添加属性值,比如要创建"<foo name='test'></foo>"这样的元素,就应Element(‘foo’,{‘name’:‘test’})
SubElement(parent,tag)与Element相似,为新建子元素,parent为父元素,例如:
a=ET.Element("a")
b = ET.SubElement(a,"b")
XML(text)通过解析text中的XML节点片段创建元素
该模块功能比较广泛,这里只举出常用的,较简单的一些,详细的文档请跳到https://docs.python.org/2/library/xml.etree.elementtree.html