python成长之路19——XML和requests

一、XML

XML是实现不同语言或程序之间进行数据交换的协议,XML文件格式如下:

<data name="head">我是概述
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year>2023</year>
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year>2026</year>
    </country>
</data>

1.解析XML

 1 from xml.etree import ElementTree as ET
 2 
 3 #解析方式一:
 4 #利用ElementTree.XML将字符串解析成xml对象
 5 #打开文件,读取XML内容
 6 str_xml=open('s1.xml','r').read()
 7 
 8 #将字符串解析成xml特殊对象,root代指xml文件的根节点
 9 root=ET.XML(str_xml)
10 print(root)
11 
12 #########################################
13 
14 #解析方式二:
15 #利用ElementTree.parse将文件直接解析成xml对象
16 tree=ET.parse('s1.xml')
17 
18 #获取xml文件的根节点
19 root=tree.getroot()
20 print(root)
21 
22 执行结果:
23 <Element 'data' at 0x10213db38>
24 <Element 'data' at 0x102220868>
解析XML获得根节点root

2.操作XML

XML格式类型是节点嵌套节点,对于每一个节点均有一下功能,一边对当前节点进行操作:

 1 假设节点是---node
 2 
 3 node.tag                             #当前节点的标签名
 4 node.attrib                          #当前节点的属性    
 5 node.text                            #当前节点的内容
 6 
 7 makeelement(tag,attrib)               #创建一个新节点
 8 copy()                                #复制节点
 9 append(subelement)                    #为当前节点追加一个子节点
10 extend(elements)                      #为当前节点扩展n个子节点
11 insert(index,subelement)              #在当前节点的子节点中插入某个节点,即:为当前节点创建子节点,然后插入指定位置
12 remove(subelement)                    #删除当前节点的某个子节点
13 find(path,namespaces=None)            #获取第一个寻找到的子节点
14 findtext(path,default=None,namespaces=None)#获取第一个寻找到的子节点的内容
15 findall(path,namespaces=None)         #获取所有的子节点
16 iterfind(path,namespaces=None)        #获取所有指定的节点,并创建一个迭代器
17 clear()                               #清空节点
18 get(key,default=None)                 #获取当前节点的属性值
19 set(key,value)                        #为当前节点设置属性值
20 keys()                                #获取当前节点所有属性的key
21 items()                               #获取当前节点的所有属性值,每个属性都是一个键值对
22 iter(tag=None)                        #当前节点的子孙中根据节点名称寻找所有指定的节点,并返回一个迭代器
23 itertext()                            #在当前节点的子孙中根据节点名称寻找所有指定的节点的内容,并返回一个迭代器

由于 每个节点 都具有以上的方法,并且在第一个步骤中解析时均得到了root(xml文件的根节点),so可以利用以上方法来操作xml文件。

1. 查看节点 

 1 from xml.etree import ElementTree as ET
 2 
 3 #使用解析方式二获得根节点
 4 tree=ET.parse('s1.xml')
 5 root=tree.getroot()
 6 
 7 #开始操作XML
 8 #说明:
 9 # <data name="head">我是概述
10 #    <aaa>
11 #        ....
12 #    </aaa>
13 # </data>
14 print(root.tag)          # data
15 print(root.attrib)       # {'name': 'head'}
16 print(root.text)         # 我是概述
17 
18 for child in root:
19     print("子节点:",child.tag,child.attrib,child.text)
20     for i in child:
21         print("孙节点:",i.tag, i.attrib, i.text)
22     print("-"*20)
23 
24 执行结果:
25 data
26 {'name': 'head'}
27 我是概述
28     
29 子节点: country {'name': 'Liechtenstein'} 
30         
31 孙节点: rank {'updated': 'yes'} 2
32 孙节点: year {} 2023
33 --------------------
34 子节点: country {'name': 'Singapore'} 
35         
36 孙节点: rank {'updated': 'yes'} 5
37 孙节点: year {} 2026
38 --------------------
遍历XML文档的所有内容
 1 from xml.etree import ElementTree as ET
 2 
 3 #使用解析方式二获得根节点
 4 tree=ET.parse('s1.xml')
 5 root=tree.getroot()
 6 
 7 #遍历XML中所有的rank节点
 8 for node in root.iter('rank'):
 9     print(node.tag,node.text,node.attrib)
10 
11 执行结果:
12 rank 2 {'updated': 'yes'}
13 rank 5 {'updated': 'yes'}
遍历XML中指定的节点

2. 修改节点内容

由于修改节点都是在内存中进行的,其不会影响文件中的内容,所以,如果想要修改,则需要重新将内存中的内容写到文件中。

 

posted @ 2017-03-27 19:02  meitangyanyan  阅读(472)  评论(0编辑  收藏  举报