以下部分均来自官方文档学习,主要以作为笔记为主
简单处理,xml.etree.ElementTree使用
被处理示例文档,并命名为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>
1. XML文件解析
导入处理库
import xml.etree.ElementTree as ET
解析文档
tree = ET.parse('country_data.xml')
创建根元素
root = tree.getroot()
通过根元素对象的属性,获取其对应的信息
- tag属性:元素名称
- attrib属性:元素的属性名和属性值的键值对
root.tag #返回‘data'
root.attrib #返回[]空值,因为data元素没有设置属性
对于根元素进行遍历,并输出子元素的名称和属性键值对
for child in root:
print(child.tag, child.attrib)
通过索引获取子元素的值
root[0][1].text #返回根目录下,第一个子元素下第二的值 '2008
2. 针对元素名进行XML文件处理
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'}
'''
findall()函数:处理返回当前元素对象下,所有与参数名相同的直接子元素的迭代器;
for country in root.findall('country'):
rank = country.find('rank').text
name = country.get('name')
print(name, rank)
'''
返回结果
Liechtenstein 1
Singapore 4
Panama 68
'''
3. 修改一个XML文件
通过解析后的XML文件,将其按照文本格式进行处理,更改对应值,最后利用tree.write()进行保存;
set(key,value)函数:在对应的元素中增加属性及属性值;
append(element)函数:将一个元素增加到文档末尾;
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')
remove(element)函数:删除一个元素;
for country in root.findall('country'):
#删除rank属性大于50的
rank = int(country.find('rank').text)
if rank > 50:
root.remove(country)
tree.write('output.xml')
4. 建立XML文档
Element(tag,attrib={},**extra)函数:创建一个XML文档以name名作为根元素;
SubElement(*parent, tag, attrib={}, *extra)函数:创建一个以parent为父元素的名字为tag的,并增加attrib属性和属性值;
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>
'''
5. 常用函数
tostring(*element,encoding =“ us-ascii”,method =“ xml”,,short_empty_elements = True )函数:将一个元素实例转化为字符串形式;
fromstring(text,parser=None)函数:从字符串形式解析XML部分,和其作用相同的函数为XML()函数;
XMLID(text,parser=None)函数:从字符串形式解析XML部分返回一个元素和元素之的字典;
Element对象函数:
- clear()函数:重置元素,删除所有子元素,清除所有属性
- items()函数:以(名称,值)对的序列形式返回元素属性,属性以任意顺序返回;
- keys()函数:返回元素属性名称的列表;
- append(subelement)函数:将子元素添加到所有子元素的末尾;
- extend(subelement)函数:在零个或者多个元素的序列中,追加子元素;
- insert(index,subelement)函数:在指定位置插入子元素;
TreeBuilder对象函数:
- start(tag,attrs)函数:创建一个新的元素,tag为元素名称,attrs为tag的属性名称,返回一个敞开的element;
- data(data)函数:将字符串加入到敞开的元素中;
- end(tag)函数:关闭元素名称为tag的元素,并返回一个闭合的元素;
- close()函数:刷新创建器缓存,并返回最顶端元素,返回一个元素实例;