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>

 

posted @ 2018-07-27 17:09  超级宇宙无敌乖宝宝  阅读(168)  评论(0编辑  收藏  举报