一.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)
更多關於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文件
# 解析文件的方式,並對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文件
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')