python3 xml模塊


一.XML簡介:

XML 指可擴展標記語言(eXtensible Markup Language),是實現不同語言或程序之間進行數據交換的協議,XML文件格式如下:

<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year age="18" name="calvin">2028</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year age="18" name="calvin">2031</year>
        <gdppc>59900</gdppc>
        <neighbor direction="N" name="Malaysia" />
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year age="18" name="calvin">2031</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
    </country>
</data>

  




二.XML操作
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from xml.etree import ElementTree as ET
from xml.dom import minidom #跟ElementTree類似,性能不好,提供了一個格式化xml的功能

#檢查QQ登錄狀態
#使用第三方模塊requests發送http請求,或者XML格式內容
r=requests.get("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=471749572")
result=r.text  #字符串類型
# result=json.loads(r.text)
# print(type(result),result)
print(result)
View Code

 



更多關於requests模塊請猛擊這里



#解析XML內容
#XML接收一個參數:字符串,將字符串轉換為特殊對象

node=ET.XML(result)

#獲取內容
if node.text=="Y":
print("在線")
else:
print("離線")

#解析字符串方式,修改保存
for node in root.iter("year"):
    new_year=int(node.text)+1
    node.text=str(new_year)
    node.set("name","calvin")  #增加name屬性
    node.set("age","18") #增加age屬性
    node.get("name")
    # del node.attrib["name"] #刪除name屬性
tree.write("xml_exemple.xml")  #將以上修改的內容寫入到xml文件
View Code

 




# 解析文件的方式,並對xml文件就行修改
# 打開並解析xml文件內容
tree=ET.parse("xml_exemple.xml")
#獲取根節點
root=tree.getroot()
#迭代循環查找year信息並修改year
for node in root.iter("year"):
    new_year=int(node.text)+1
    node.text=str(new_year)
    node.set("name","calvin")  #增加name屬性
    node.set("age","18") #增加age屬性
    node.get("name")
    # del node.attrib["name"] #刪除name屬性
tree.write("xml_exemple.xml")  #將以上修改的內容寫入到xml文件
View Code
 
1.創建xml文件

# 創建根節點
root = ET.Element("family")
 
#創建節點大兒子
son1 = ET.Element('son', {'name': 'kobe'})
# 創建節點小兒子
son2 = ET.Element('son', {"name": 'calvin'})

# 在兩個兒子中分別創建兩個孫子
grandson1 = ET.Element('grandson', {'name': 'kobe_jr','age':"8"})
grandson2 = ET.Element('grandson', {'name': 'calvin_jr','age':"24"})
son1.append(grandson1)
son2.append(grandson2)

# 把兒子添加到根節點中
root.append(son1)
root.append(son2)

tree = ET.ElementTree(root)
tree.write('family_tree.xml',encoding='utf-8', short_empty_elements=False)
2.新增節點有兩種方式

tree=ET.parse("xml_exemple.xml")
# 一切皆對象,對象都由類創建,對象所有的功能都跟在與其相關的類中
# 1、tree這個對象由ElementTree類創建,tree等同於ElementTree()
# 2、getroot()獲取xml根節點
# 3、write()將內存中的xml寫入到文件

#獲取根節點
root=tree.getroot()
#第一種方式:調用makeelement對象創建節點,創建的節點類型為Element類型
# s=root.makeelement("test",{"k1":"v1"})
# ss=s.makeelement("test02",{"k2":"v2"})
#第二種方式:直接用element類創建,與上面用makeelement函數創建節點一樣
s=ET.Element("test",{"k1":"v1"})
ss=ET.Element("test02",{"k2":"v2"})
root.append(s)
s.append(ss)
tree.write("xml_exemple.xml")

3.格式化創建的xml文件
#創建xml文件


# 創建根節點
root = ET.Element("family")

# 創建節點大兒子
son1 = ET.Element('son', {'name': '科比'})
# 創建節點小兒子
son2 = ET.Element('son', {"name": 'calvin'})

# 在兩個兒子中分別創建兩個孫子
grandson1 = ET.Element('grandson', {'name': 'kobe_jr','age':"8"})
grandson2 = ET.Element('grandson', {'name': 'calvin_jr','age':"24"})
son1.append(grandson1)
son2.append(grandson2)

# 把兒子添加到根節點中
root.append(son1)
root.append(son2)

tree = ET.ElementTree(root)
tree.write('family_tree.xml',encoding='utf-8', short_empty_elements=False,xml_declaration=True)
#定義函數用於格式化xml文件內容

def MyWrite(elem,file_path):
    rough_string = ET.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    new_str= reparsed.toprettyxml(indent="\t")
    f=open(file_path,'w',encoding='utf-8')
    f.write(new_str)
    f.close()

MyWrite(root,'new_family.xml')
View Code

 

 
        



免責聲明!

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



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