模塊講解----XML模塊

XML實現不一樣語言或者程序之間進行數據交換的協議
XML文件格式以下:node

一、瀏覽器返回的字符串格式類型有:
  a、HTML
  b、Json
  c、XMLpython

 

二、XML格式以下:mysql

 1 <data>  #表示跟節點的開頭
 2     <country name="CTO" TEL='13511122233' >
 3         <zongjian name='zhangsan'  age='19'>
 4             <jingli name='wangwu'  age='22'>
 5                 .....(其餘屬性)
 6             </jingli>
 7         </zongjian>
 8         <zongjian name='lisi' age='19'>2023</zongjian>
 9     </country>
10     <country name="CEO">
11         <rank updated="yes">5</rank>
12         <year>2026</year>
13         <gdppc>59900</gdppc>
14         <neighbor direction="N" name="Malaysia" />
15     </country>
16     <country name="COO">
17         <rank updated="yes">69</rank>
18         <year>2026</year>
19         <gdppc>13600</gdppc>
20         <neighbor direction="W" name="Costa Rica" />
21         <neighbor direction="E" name="Colombia" />
22     </country>
23 </data> #表示根節點的結尾

 

 

三、要點:web

1 XML的格式就至關於字典嵌套字典的形式;
2 每個節點都是一個Element對象節點裏面能夠嵌套節點;
3 每個字典都是一個dict的對象,跟字典裏嵌套字典的方式同樣;
4 在XML的操做方法中,使用element中的每個節點。

 

 

python中處理XML的兩種格式方法

1 1、字符串類型;(能夠用做有層次邏輯的頁面展現)
2 例如:列車時刻表
3 http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=G666&UserID=
4 
5 2、文本文件類型:(程序的配置文件)
6 數據庫的類型:(mysql、oracle)
7 鏈接數據庫IP:
8 端口:
9 鏈接池最多爲多少:

 

 

解析XML

XML格式類型是節點嵌套節點,對於每個節點均有如下功能,以便對當前節點進行操做:
 1 1、字符串解析:
 2 (利用ElementTree.XML將字符串解析成xml對象)
 3 from xml.etree import ElementTree as ET
 4  5 # 打開文件,讀取XML內容
 6 str_xml = open('xo.xml', 'r').read()      #這種方法也能夠利用在requests請求後,返回來的xml結果集
 7  8 # 將字符串解析成xml特殊對象,root代指xml文件的根節點
 9 root = ET.XML(str_xml)
10 注:保存方法分2步(a、使ElementTree方法將內存的root保存一個變量裏;b、而後在將變量寫入到一個新的文件裏)
11 
12 
13 
14 2、文本文件直接解析:
15 (利用ElementTree.parse將文件直接解析成xml對象)
16 from xml.etree import ElementTree as ET
17 18 # 直接解析xml文件
19 tree = ET.parse("xo.xml")
20 21 # 獲取xml文件的根節點
22 root = tree.getroot()
23 注:用解析XML文件的變量,直接寫入到新文件中。
24 
25 因爲每一個節點 都具備以上的方法,而且在上一步驟中解析時均獲得了root(xml文件的根節點),因此能夠利用以上方法進行操做xml文件。

 

 

操做XML

(一)、遍幣:
一、遍幣XML文檔的全部內容:
 1 from xml.etree import ElementTree as ET
 2 
 3 ############ 解析方式一 ############
 4 """
 5 #字符串的方式解析
 6 # 打開文件,讀取XML內容
 7 str_xml = open('xo.xml', 'r').read()
 8 
 9 # 將字符串解析成xml特殊對象,root代指xml文件的根節點
10 root = ET.XML(str_xml)
11 """
12 ############ 解析方式二 ############
13 #以文本文檔格式解析
14 # 直接解析xml文件
15 tree = ET.parse("xo.xml")
16 
17 # 獲取xml文件的根節點
18 root = tree.getroot()
19 
20     
21 ### 操做
22 
23 # 頂層標籤
24 print(root.tag)
25 
26 
27 # 遍歷XML文檔的第二層
28 for child in root:
29     # 第二層節點的標籤名稱和標籤屬性
30     print(child.tag, child.attrib)
31     # 遍歷XML文檔的第三層
32     for i in child:
33         # 第二層節點的標籤名稱和內容
34         print(i.tag,i.text)

 

二、遍歷XML中指定的節點:sql

 1 from xml.etree import ElementTree as ET
 2 
 3 ############ 解析方式一 ############
 4 """
 5 #字符串的方式解析
 6 # 打開文件,讀取XML內容
 7 str_xml = open('xo.xml', 'r').read()
 8 
 9 # 將字符串解析成xml特殊對象,root代指xml文件的根節點
10 root = ET.XML(str_xml)
11 """
12     
13     
14 ############ 解析方式二 ############
15 # 遍歷XML文檔的第二層
16 # 直接解析xml文件
17 tree = ET.parse("xo.xml")
18 
19 # 獲取xml文件的根節點
20 root = tree.getroot()
21 
22 
23 ### 操做
24 
25 # 頂層標籤
26 print(root.tag)
27 
28 
29 # 遍歷XML中全部的year節點
30 for node in root.iter('year'):
31     # 節點的標籤名稱和內容
32     print(node.tag, node.text)

 

(二)、修改並保存:
因爲修改的節點時,均是在內存中進行,其不會影響文件中的內容。因此,若是想要修改,則須要從新將內存中的內容寫到文件。
一、字符串格式:
 1 #導入文件模塊:
 2 from xml.etree import ElementTree as ET
 3 
 4 str_xml = open('ox.xml','r').read()  #打開文件,讀取XML內容
 5 root = ET.XML(str_xml)                #將字符串解析成xml特殊對象,root代指xml文件的跟節點
 6 
 7 
 8 # 打印頂層的根標籤
 9 print(root.tag)
10 
11 
12 ######################增,刪,改,查#########################
13 
14 #循環全部的year標籤:()
15 for node in root.iter('year'):
16 
17     #修改標籤的中間數據
18     new_year  = int(node.text) + 1
19     node.text = str(new_year)
20 
21     #設置標籤屬性:
22     node.set('name','zhangsan')
23     node.set('age','lisi')
24 
25     #刪除標籤屬性:
26     del node.attrib['name']
27 
28     #查看標籤名稱、屬性、標籤內容
29     print(node.tag,node.attrib)
30     print(node.text)
31 
32 
33 #######################保存########################
34 
35 #使ElementTree方法將內存的root保存一個變量裏:
36 tree = ET.ElementTree(root)
37 
38 #將XML的變量寫入新的文件中:
39 tree.write('newox.xml',encoding='utf-8')

 

二、文本文檔格式:數據庫

 1 from xml.etree import ElementTree as ET
 2 
 3 tree = ET.parse("ox.xml") #直接解析XML文件
 4 root = tree.getroot()    #獲取xml文件的根節點
 5 
 6 
 7 #打印頂層的根標籤
 8 print(root)
 9 
10 ######################增,刪,改,查#########################
11 
12 #循環全部year標籤:
13 for node in root.iter('year'):
14 
15     #修改year標籤中的數據(將year節點中的內容自增一)
16     new_year = int(node.text) + 1
17     node.text = str(new_year)
18 
19     #添加標籤屬性
20     node.set('name','zhangsan')
21     node.set('age','19')
22 
23     #刪除標籤屬性
24     del node.attrib['age']
25 
26     #查看標籤名稱、屬性、標籤內容
27     print(node.tag,node.attrib)
28     print(node.text)
29 
30     #修改標籤屬性
31     node.set('name','lisi')
32 
33     #查看標籤名稱、屬性、標籤內容
34     print(node.tag,node.attrib)
35     print(node.text)
36 
37 #直接將內存中的root寫入到新文件中
38 tree.write("new.xml",encoding='utf-8')

 

(三)、刪除並保存:
一、解析字符串方式打開,刪除,保存:
 1 from xml.etree import ElementTree as ET
 2 
 3 ############ 解析字符串方式打開 ############
 4 
 5 # 打開文件,讀取XML內容
 6 str_xml = open('xo.xml', 'r').read()
 7 
 8 # 將字符串解析成xml特殊對象,root代指xml文件的根節點
 9 root = ET.XML(str_xml)
10 
11 ############ 操做 ############
12 
13 # 頂層標籤
14 print(root.tag)
15 
16 # 遍歷data下的全部country節點
17 for country in root.findall('country'):
18     # 獲取每個country節點下rank節點的內容
19     rank = int(country.find('rank').text)
20 
21     if rank > 50:
22         # 刪除指定country節點
23         root.remove(country)
24 
25 ############ 保存文件 ############
26 tree = ET.ElementTree(root)
27 tree.write("newnew.xml", encoding='utf-8')

 

二、解析文件方式打開,刪除,保存:瀏覽器

 1 from xml.etree import ElementTree as ET
 2 
 3 ############ 解析文件方式 ############
 4 
 5 # 直接解析xml文件
 6 tree = ET.parse("xo.xml")
 7 
 8 # 獲取xml文件的根節點
 9 root = tree.getroot()
10 
11 ############ 操做 ############
12 
13 # 頂層標籤
14 print(root.tag)
15 
16 # 遍歷data下的全部country節點
17 for country in root.findall('country'):
18     # 獲取每個country節點下rank節點的內容
19     rank = int(country.find('rank').text)
20 
21     if rank > 50:
22         # 刪除指定country節點
23         root.remove(country)
24 
25 ############ 保存文件 ############
26 tree.write("newnew.xml", encoding='utf-8')

 

建立XML文檔方法

一、基於Element的建立:
變量名 = ET.Element('標籤名',{'k1':'v1','k2':'v2'})
 1 from xml.etree import ElementTree as ET
 2 
 3 ##################################建立標籤和標籤屬性##############################
 4 #添加標籤名字: 變量名 = ET.Element('標籤名',{'k1':'v1','k2':'v2'})
 5 #建立跟節點標籤和屬性:
 6 root = ET.Element('father',{'name':'Baba','age':'50'})
 7 
 8 #建立兒子節點標籤和屬性:
 9 son1 = ET.Element('son_1',{'name':'zhangsan','age':'29'})
10 son2 = ET.Element('son_2',{'name':'zhangsi','age':'26'})
11 
12 #建立孫子節點標籤和屬性:
13 grandchild1 = ET.Element('sunzi_1',{'name':'zhangwu','age':'2'})
14 grandchild2 = ET.Element('sunzi_2',{'name':'zhangliu','age':'3'})
15 
16 #給孫子標籤內添加內容:
17 grandchild1.text = '孫子1'
18 grandchild2.text = '孫子2'
19 
20 
21 ##################################指定標籤到父子節點中################################
22 #把孫子節點添加到兒子節點裏:
23 son1.append(grandchild1)
24 son2.append(grandchild2)
25 
26 
27 #把兒子添加到父親(跟)節點裏:
28 root.append(son1)
29 root.append(son2)
30 
31     
32 ##################################保存文件################################
33 #保存並寫入文件:
34 tree = ET.ElementTree(root)
35 tree.write('oooo.xml',encoding='utf-8',xml_declaration=True,short_empty_elements=False)
36 
37 
38 
39 
40 顯示結果:
41 <?xml version='1.0' encoding='utf-8'?>
42 <father age="58" name="wang1">
43     <son1 age="27" name="wang2">兒子1</son1>
44     <son2 age="26" name="wang3">兒子2
45         <sunzi age="19" name="wang5">孫子2</sunzi>
46     </son2>
47 </father>

 

二、基於makeelement建立:
變量名 = 要添加上一級標籤名字.makeelement('標籤名',{'k1':'v1','k2':'v2'})
 
 1 from xml.etree import ElementTree as ET
 2 
 3 #建立跟節點標籤
 4 root = ET.Element('father',{'name':'zhangda','age':'58'})
 5 
 6 
 7 ##################################建立標籤和標籤屬性##############################
 8 #建立標籤格式:變量名 = 要添加上一級標籤名字.makeelement('標籤名',{'k1':'v1','k2':'v2'})
 9 
10 #建立兒子節點標籤和屬性:
11 #son1 = ET.Element('son1',{'name':'zhangsan','age':'28'})
12 son1 = root.makeelement('son1',{'name':'lisi','age':'30'})
13 #son2 = ET.Element('son2',{'name':'liwu','age':'29'})
14 son2 = root.makeelement('son2',{'name':'lisan','age':'31'})
15 
16 #建立孫子節點標籤和屬性:
17 #granchild1 = ET.Element('granchild1',{'name':'liwu','age':'13'})
18 granchild_1 = son1.makeelement('granchild_1',{'name':'li5','age':'14'})
19 
20 #granchild2 = ET.Element('granchild2',{'name':'liliu','age':'12'})
21 granchild_2 = son2.makeelement('granchild_2',{'name':'li6','age':'12'})
22 
23 
24 ##################################指定標籤到父子節點中################################    
25 #將孫子節點添加到兒子節點:
26 son1.append(granchild_1)
27 son2.append(granchild_2)
28 
29 #將兒子節點添加到父親節點裏:
30 root.append(son1)
31 root.append(son2)
32 
33 
34 ##################################保存文件################################
35 tree = ET.ElementTree(root)
36 tree.write('oooo.xml',encoding='utf-8',short_empty_elements=False)
37 
38 
39 
40 顯示結果:
41 
42 <father age="58" name="zhangda">
43     <son1 age="30" name="lisi">
44         <granchild_1 age="14" name="li5"> </granchild_1>
45     </son1>
46     
47     <son2 age="31" name="lisan">
48         <granchild_2 age="12" name="li6"> </granchild_2>
49     </son2>
50 </father>

 

三、基於SubElement的方式建立:
變量名 = ET.SubElement(上一級標籤名,'當前標籤名',attrib={'k1':'v1','k2':'v2'})
 1 from xml.etree import ElementTree as ET
 2 
 3 #建立根節點:
 4 root = ET.Element("father",{'name':'wang1','age':'58'})
 5 
 6 #建立兒子節點和屬性
 7 #建立格式:變量名 = ET.SubElement(上一級標籤名,'當前標籤名',attrib={'k1':'v1','k2':'v2'})
 8 son1 = ET.SubElement(root,"son1",attrib={'name':'wang2','age':'27'})
 9 son1.text = '兒子1'
10 son2 = ET.SubElement(root,"son2",attrib={'name':'wang3','age':'26'})
11 son2.text = '兒子2'
12 
13 #建立孫子節點
14 
15 #grandchild_1 = ET.SubElement(son1,"sunzi",attrib={'name':'wang4','age':'18'})
16 #grandchild_1.text = '孫子1'
17 grandchild_2 = ET.SubElement(son2,"sunzi",attrib={'name':'wang5','age':'19'})
18 grandchild_2.text = '孫子2'
19 
20 #保存
21 free = ET.ElementTree(root)
22 free.write('test.xml',encoding='utf-8',xml_declaration=True,short_empty_elements=False)
23 
24 
25 
26 顯示結果:
27 <?xml version='1.0' encoding='utf-8'?>
28 <father age="58" name="wang1">
29     <son1 age="27" name="wang2">兒子1</son1>
30     <son2 age="26" name="wang3">兒子2
31         <sunzi age="19" name="wang5">孫子2</sunzi>
32     </son2>
33 </father>

 

 

XML的格式化

 1 1、格式化xml函數:
 2 def prettify(elem):
 3     '''
 4     將節點轉換成字符串,並添加縮進
 5     '''
 6     rough_string = ET.tostring(elem, 'utf-8')
 7     reparsed = minidom.parseString(rough_string)
 8     return reparsed.toprettyxml(indent="\t")
 9 
10 2、調用格式化函數,並將root傳參:
11 raw_str = prettify(root)
12 
13 3、將格式化好的變量寫入文本文檔:
14 with open('oooo.xml','w',encoding='utf-8') as f:
15     f.write(raw_str)

 

案例:oracle

 1 #!/usr/bin/env python
 2 # -*- coding:utf8 -*-
 3 # Author:Dong Ye
 4 
 5 from xml.etree import ElementTree as ET
 6 from xml.dom import minidom
 7 
 8 
 9 #格式化xml函數:
10 def prettify(elem):
11     '''
12     將節點轉換成字符串,並添加縮進
13     '''
14     rough_string = ET.tostring(elem, 'utf-8')
15     reparsed = minidom.parseString(rough_string)
16     return reparsed.toprettyxml(indent="\t")
17 
18 
19 ##################################建立標籤和標籤屬性##############################
20 #添加標籤名字: 變量名 = ET.Element('標籤名',{'k1':'v1','k2':'v2'})
21 #建立跟節點標籤和屬性:
22 root = ET.Element('father',{'name':'Baba','age':'50'})
23 
24 #建立兒子節點標籤和屬性:
25 son1 = ET.Element('son_1',{'name':'zhangsan','age':'29'})
26 son2 = ET.Element('son_2',{'name':'zhangsi','age':'26'})
27 
28 #建立孫子節點標籤和屬性:
29 grandchild1 = ET.Element('sunzi_1',{'name':'zhangwu','age':'2'})
30 grandchild2 = ET.Element('sunzi_2',{'name':'zhangliu','age':'3'})
31 
32 #給孫子標籤內添加內容:
33 grandchild1.text = '兒子1--孫子1'
34 grandchild2.text = '兒子2--孫子2'
35 
36 
37 ##################################指定標籤到父子節點中################################
38 #把孫子節點添加到兒子節點裏:
39 son1.append(grandchild1)
40 son2.append(grandchild2)
41 
42 
43 #把兒子添加到父親(跟)節點裏:
44 root.append(son1)
45 root.append(son2)
46 
47 ##################################保存文件################################
48 #保存並寫入文件:
49 # tree = ET.ElementTree(root)
50 # tree.write('oooo.xml',encoding='utf-8',xml_declaration=True,short_empty_elements=False)
51 
52 
53 raw_str = prettify(root)
54 
55 with open('oooo.xml','w',encoding='utf-8') as f:
56     f.write(raw_str)
View Code

 

app

相關文章
相關標籤/搜索