利用python处理xml文件

以下部分均来自官方文档学习,主要以作为笔记为主

简单处理,xml.etree.ElementTree使用

被处理示例文档,并命名为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>

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)

'''

	
	
		
	

'''

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()函数:刷新创建器缓存,并返回最顶端元素,返回一个元素实例;

你可能感兴趣的:(笔记)