xml模块
xml模块
xml是可扩展标记语言和HTML类似,用来传输和储存数据,python里面的处理XML数据的模块为xml.etree.ElementTree,ElementTree的意思是节点树,二Element带便一个单独的节点。
xml数据由标签作为标记而标又有两种。
自闭合标签(有头有尾):<age>2</age>
非闭合标签(有头无尾):<husband age="5" name="Mary" />
看一段下面的xml数据:
<data> <animals name="Tom"> <age>2</age> <b_year>2010</b_year> <weight>20</weight> <husband age="10" name="Alex" /> </animals> <animals name="Bob"> <age>3</age> <b_year>2012</b_year> <weight>15</weight> <husband age="5" name="Mary" /> </animals> <animals name="Chirwy"> <age>4</age> <b_year>2008</b_year> <weight>25</weight> <husband age="3" name="Ared" /> </animals> </data>
1.导入xml模块和解析xml文件
1 import xml.etree.ElementTree as ET 2 3 tree = ET.parse('XML_data') #使用parse方法解析XML_data得到xlm数据树,把它赋值给tree得到一个对象,接下来直接操作此对象 4 root = tree.getroot() #得到根节点 5 print(root) #打印根节点的内存地址 6 print(root.tag) #tag方法打印根结点的标签名称
2.查看其他节点及其名称
1 import xml.etree.ElementTree as ET 2 3 tree = ET.parse('XML_data') #使用parse方法解析XML_data得到xlm数据树,把它赋值给tree得到一个对象,接下来直接操作此对象 4 root = tree.getroot() #得到根节点 5 print(root) #打印根节点的内存地址 6 print(root.tag) #tag属性打印根结点的标签名称 7 8 for i in root: 9 print("子节点",i.tag) 10 for j in i: 11 print("孙节点", j.tag)
结果:
子节点 animals
孙节点 age
孙节点 b_year
孙节点 weight
孙节点 husband
子节点 animals
孙节点 age
孙节点 b_year
孙节点 weight
孙节点 husband
子节点 animals
孙节点 age
孙节点 b_year
孙节点 weight
孙节点 husband
3.获得标签里面的属性
1 for m in root: 2 print(m.attrib)
{'name': 'Tom'} {'name': 'Bob'} {'name': 'Chirwy'}
4.标签里面包含的文本内容
1 for m in root: 2 for n in m: 3 print(n.text)
2 2010 20 None 3 2012 15 None 4 2008 25 None
5.若想取到特定标签中的值,可以使用iter()方法
1 for n in root.iter("b_year"): 2 print(n.tag,n.text)
b_year 2010 b_year 2012 b_year 2008
6.修改xml数据
set()方法可以给标签添加新的属性
1 for n in root.iter("b_year"): 2 new_year=int(n.text)+1 3 n.text=str(new_year)#修改b_year标签的text属性 4 n.set("updated1","yes")#给year这个标签增加一个属性 5 tree.write("xml_data1.xml")#直接把修改的写入到文件中
第五行中的文件名可以使用原来的文件名字相当于覆盖更新,他也可以使用其他的名称,相当于又创建了一个新的xml文件。
7.删除标签使用remove()方法,使用方法和6一样
8.通过模块创建xml文件
1 import xml.etree.ElementTree as ET #导入模块 2 new_xml = ET.Element('Student') #创建根节点 3 name = ET.SubElement(new_xml, 'name', attrib={"GPA":'4.5'}) #创建子节点 4 age = ET.SubElement(name, 'age',attrib={'isOK':'ok'}) #创建孙节点 5 sex = ET.SubElement(name, 'sex') #创建孙节点 6 sex.text = '28' #添加标签内容 7 8 et = ET.ElementTree(new_xml) #生成文件对象 9 et.write('test.xml', encoding='utf-8',xml_declaration=True) #生成对象
结果:
<?xml version='1.0' encoding='utf-8'?> <Student> <name GPA="4.5"> <age isOK="ok" /> <sex>28</sex> </name> </Student>