2.3.3 Python和XML

XML在软件领域用途非常广泛
XML指可扩展标记语言(EXtensible Markup Language)。
XML是一种标记语言,很类似于HTML。
XML的设计宗旨是传输数据,而非显示数据。
XML标签没有被预定义,你需要自行定义标签。
XML被设计为具有自我描述性。
XML是W3C的推荐标准。

常用属性如下
tag:string,元素数据种类。
text:string,元素的内容。
attrib:dictionary,元素的属性字典。
tail:string,元素的尾形。
针对属性的操作如下:
clear():清空元素的后代、属性、text和tail也设置为None。
get(key,default=None):获取key对应的属性值,如该属性不存在则返回default值。
items():根据属性字典返回一个列表,列表元素为(key,value)。
keys():返回包含所有元素属性键的列表。
set(key,value):设置新的属性键与值。针对后代的操作如下。
append(subelement):添加直系子元素。
extend(subelements):增加一串元素对象作为子元素。
find(match):寻找第一个匹配子元素,匹配对象可以为tag或path。
findall(match):寻找所有匹配子元素,匹配对象可以为tag或path。
findtext(match):寻找第一个匹配子元素,返回其text值。匹配对象可以为tag或path。
insert(index,element):在指定位置插入子元素。
iter(tag=None):生成遍历当前元素所有后代或者给定tag的后代的迭代器。
iterfind(match):根据tag或path查找所有的后代。
itertext():遍历所有后代并返回text值。
remove(subelement):删除子元素。
ElementTree对象:
find(match)。
findall(match)。
findtext(match,default=None)。
getroot():获取根节点。
iter(tag=None)。
iterfind(match)。
parse(source,parser=None):装载xml对象,source可以为文件名或文件类型对象。
write(file,encoding="us-ascii",xml_declaration=None,default_namespace=None,method="xml")。
编写一个test.xml文件:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
下面Python操作XML:
>>> import xml.etree.cElementTree as ET
>>> tree = ET. ElementTree (file="D://test.xml")
>>> t = tree. getroot () #获取根目录
>>> t. tag
'bookstore'
>>> t. attrib
{}
读出全部元素:
>>> for i in t:
print i.tag,i.attrib

book {'category': 'COOKING'}
book {'category': 'CHILDREN'}
book {'category': 'WEB'}
读出指定信息:
>>> t[0].tag
'book'
>>> t[0].attrib
{'category': 'COOKING'}
获取详细内容:
>>> t[0][0].tag
'title'
>>> t[0][0].attrib
{'lang': 'en'}
>>> t[0][0].text
'Everyday Italian'
指定节点遍历:
>>> for e in tree.iter (tag="book"):
print e.tag,e.attrib

book {'category': 'COOKING'}
book {'category': 'CHILDREN'}
book {'category': 'WEB'}
>>> for e in tree.iter (tag="title"):
print e.tag,e.attrib,e.text

title {'lang': 'en'} Everyday Italian
title {'lang': 'en'} Harry Potter
title {'lang': 'en'} Learning XML
如果不指定元素名称,就是将所有的元素遍历一遍。
通过搜索指定内容:
>>> for e in tree. iterfind ("book/title"):
print e.text

Everyday Italian
Harry Potter
Learning XML
利用findall()方法,也可以实现查找功能:
>>> for e in tree. findall ("book"):
title = e.find("title").text
pri = e.find("price").text
lang = e.find("title").attrib
print title,pri,lang

Everyday Italian 30.00 {'lang': 'en'}
Harry Potter 29.99 {'lang': 'en'}
Learning XML 39.95 {'lang': 'en'}
对xml文档的编辑:
>>> t[1].tag
'book'
>>> del t[1] #删除节点,只删除内存中的节点,原文件不变
>>> tree. write ("D://test.xml") #重新写入一个文档,覆盖原文件
对文档进行修改:
>>> for p in t.iter("price"):
print p.text

30.00
39.95
>>>
>>> for p in t.iter("price"):
new_price = float(p.text)+10
p.text = str(new_price)
p.set("updated","up")

>>> tree.write("D://test.xml")
删除一般很少用del(),常用remove()方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值