python中XML模塊


XML,可擴展標記語言,用來傳輸和存儲數據。

 xml的文件格式:

<?xml   version="1.0"   encoding="utf-8"?>       
  <userdata   createuser="false">userdata內容   
      <dataconnection>   
          <server>localhost</server>   
          <uid>sa</uid>   
          <pwd></pwd>   
      </dataconnection>   
      <net>   
          <name>jiayuan</name>   
      </net>   
  </userdata>   

xml中節點Element類的函數

 1 tag                   當前節點標簽名
 2 attrib                當前節點屬性
 3 text                  當前節點內容
 4 append                添加一個子節點
 5 clear                 清空節點
 6 extend                為當前節點添加 n 個子節點
 7 find                  獲取第一個尋找到的子節點
 8 findall               獲取所有的子節點
 9 findtext              獲取第一個尋找到的子節點的內容
10 get                   獲取當前節點的屬性
11 insert                在當前節點創建子節點,然后插入指定位置
12 items                 獲取當前節點的所有屬性,和字典中的items一樣,內容都是健值對
13 iter                  在根據節點名稱尋找所有指定的節點,並返回一個迭代器
14 iterfind              獲取所有指定的節點,並放在一個迭代器中
15 itertext              在子孫中根據節點名稱尋找所有指定的節點的內容,並返回一個迭代器
16 keys                  獲取當前節點的所有屬性的 key
17 makeelement           創建一個新節點
18 remove                刪除某個節點
19 set                   設置當前節點屬性

 

xml解析

  1.ElementTree.XML(str)函數
1 from xml.etree import ElementTree as ET
2 
3 with open("data.xml",'r') as file:
4     #將xml文檔中內容讀取到strXml中
5     strXml =file.read()
6     #XML將字符串解析成xml特殊對象,返回xml.etree.ElementTree.Element對象,這個是根節點
7     root=ET.XML(strXml)
8     print(type(root))
XML 
  2.ElementTree.parse("file_path")函數
1 #打開xml文件並且解析,返回一個xml.etree.ElementTree.ElementTree對象
2 tree=ET.parse("data.xml")
3 #獲取xml的根節點
4 root=tree.getroot()
5 
6 print(root.tag)
parse
 
        

 遍歷指定的節點

1 with open("data.xml",'r',encoding="utf-8") as file:
2     #將xml文檔中內容讀取到strXml中
3     strXml =file.read()
4     #XML將字符串解析成xml特殊對象,返回xml.etree.ElementTree.Element對象,這個是根節點
5     root=ET.XML(strXml)
6     for value in root.iter("uid"):
7         print(value.tag,value.text)
遍歷指定節點

 

修改節點的內容並保存

 1 with open("data.xml",'r',encoding="utf-8") as file:
 2     #將xml文檔中內容讀取到strXml中
 3     strXml =file.read()
 4     #XML將字符串解析成xml特殊對象,返回xml.etree.ElementTree.Element對象,這個是根節點
 5     root=ET.XML(strXml)
 6     node=root.find("dataconnection")
 7     print(node)
 8     node.set("name","hello,xml")
 9 #利用ET.XML這種方法打開XML的話不能直接保存,需要借助ET.ElementTree
10 #如果使用的ET.parse(filePath)打開的話,就不需要額外的創建一個ElementTree對象
11     tree=ET.ElementTree(root)
12     tree.write("data.xml",encoding="utf-8")
修改並保存
 1 with open("data.xml",'r',encoding="utf-8") as file:
 2     #將xml文檔中內容讀取到strXml中
 3     strXml =file.read()
 4     #XML將字符串解析成xml特殊對象,返回xml.etree.ElementTree.Element對象,這個是根節點
 5     root=ET.XML(strXml)
 6     node=root.find("dataconnection")
 7     root.remove(node)
 8 #利用ET.XML這種方法打開XML的話不能直接保存,需要借助ET.ElementTree
 9 #如果使用的ET.parse(filePath)打開的話,就不需要額外的創建一個ElementTree對象
10     tree=ET.ElementTree(root)
11     tree.write("data.xml",encoding="utf-8")
刪除節點並保存

 

 創建XML文檔

 1 from xml.etree import ElementTree as ET
 2 #創建根節點
 3 root=ET.Element("home",{"name":"root"})
 4 
 5 #創建子節點,也可以用下面的方式創建,但只是創建,還沒有加到任何節點下面
 6 #sub=root.makeelement("son",{"sonName":"haha"}),下面同樣可以
 7 sub=ET.Element("son",{"sonName":"haha"})
 8 
 9 subsub=ET.Element("subson",{"subsonName":"xixi"})
10 
11 root.append(sub)
12 
13 sub.append(subsub)
14 tree=ET.ElementTree(root)
15 tree.write("createXml.xml")
16 
17 ###########結果(實際上是沒有縮進的)############
18 <home name="root">
19     <son sonName="haha">
20         <subson subsonName="xixi" />
21     </son>
22 </home>
 1 from xml.etree import ElementTree as ET
 2 
 3 root=ET.Element("home",{"name":"root"})
 4 #創建節點並添加到第一個參數的節點下面
 5 sub=ET.SubElement(root,"son",{"subName":"haha"})
 6 
 7 subsub=ET.SubElement(sub,"son",{"subName":"haha"})
 8 
 9 tree=ET.ElementTree(root)
10 tree.write("createXml2.xml")
11 
12 #########結果(結果實際上沒有縮進)###########
13 <home name="root">
14     <son subName="haha">
15         <son subName="haha" />
16     </son>
17 </home>

 

增加縮進

 1 from xml.etree import ElementTree as ET
 2 from xml.dom import minidom
 3 
 4 def prettify(elem):
 5     """
 6     將節點轉換成字符串,並添加縮進
 7     """
 8     #返回該對象的字符串表示
 9     rough_string = ET.tostring(elem, 'utf-8')
10     print(type(rough_string))
11     #從xml字符串得到dom對象
12     reparsed = minidom.parseString(rough_string)
13     print(type(reparsed))
14     return reparsed.toprettyxml(indent="\t")
15 
16 root=ET.Element("home",{"name":"root"})
17 #創建節點並添加到第一個參數的節點下面
18 sub=ET.SubElement(root,"son",{"subName":"haha"})
19 
20 subsub=ET.SubElement(sub,"son",{"subName":"haha"})
21 
22 newStr=prettify(root)
23 
24 file=open("createXml3.xml","w",encoding="utf-8")
25 file.write(newStr)
26 file.close()
利用xml.dom.minidom增加縮進

 

命名空間的使用

 1 from xml.etree import ElementTree as ET
 2 #注冊命名空間
 3 ET.register_namespace("baidu","http://baidu.com")
 4 
 5 root=ET.Element("{http://baidu.com}home",{"name":"root"})
 6 #創建節點並添加到第一個參數的節點下面
 7 sub=ET.SubElement(root,"{http://baidu.com}son",{"{http://baidu.com}subName":"haha"})
 8 
 9 subsub=ET.SubElement(sub,"{http://baidu.com}son",{"{http://baidu.com}subName":"xixi"})
10 
11 tree=ET.ElementTree(root)
12 tree.write("createXml4.xml")
13 
14 ###########結果(實際中沒有縮進)##############
15 <baidu:home xmlns:baidu="http://baidu.com" name="root">
16     <baidu:son baidu:subName="haha">
17         <baidu:son baidu:subName="xixi" />
18     </baidu:son>
19 </baidu:home>
命名空間的使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM