以下部分均来自官方文档学习,主要以作为笔记为主
被处理示例文档,并命名为country_data.xml
<data>
<country name="Liechtenstein">
<rank>1rank>
<year>2008year>
<gdppc>141100gdppc>
<neighbor name="Austria" direction="E"/>
<neighbor name="Switzerland" direction="W"/>
country>
<country name="Singapore">
<rank>4rank>
<year>2011year>
<gdppc>59900gdppc>
<neighbor name="Malaysia" direction="N"/>
country>
<country name="Panama">
<rank>68rank>
<year>2011year>
<gdppc>13600gdppc>
<neighbor name="Costa Rica" direction="W"/>
<neighbor name="Colombia" direction="E"/>
country>
data>
导入处理库
import xml.etree.ElementTree as ET
解析文档
tree = ET.parse('country_data.xml')
创建根元素
root = tree.getroot()
通过根元素对象的属性,获取其对应的信息
root.tag #返回‘data'
root.attrib #返回[]空值,因为data元素没有设置属性
对于根元素进行遍历,并输出子元素的名称和属性键值对
for child in root:
print(child.tag, child.attrib)
通过索引获取子元素的值
root[0][1].text #返回根目录下,第一个子元素下第二的值 '2008
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
'''
通过解析后的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')
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)
'''
'''
tostring(*element,encoding =“ us-ascii”,method =“ xml”,,short_empty_elements = True )函数:将一个元素实例转化为字符串形式;
fromstring(text,parser=None)函数:从字符串形式解析XML部分,和其作用相同的函数为XML()函数;
XMLID(text,parser=None)函数:从字符串形式解析XML部分返回一个元素和元素之的字典;
Element对象函数:
TreeBuilder对象函数: