第一part:XML文件介紹
1.XML的定義: 指可擴展標記語言(EXtensible Markup Language)。
2.XML的特點:
1)XML 是一種很像HTML的標記語言; 2)XML 的設計宗旨是傳輸數據,而不是顯示數據; 3)XML 標簽沒有被預定義,需要自行定義標簽; 4)XML 被設計為具有自我描述性; 5)XML 是 W3C 的推薦標准。 |
3.XML的用途:
1)XML把數據從HTML分離; 2)XML簡化數據共享; 3)XML簡化數據傳輸; 4)XML簡化平台變更; 5)XML使您的數據更有用; 6)XML用於創建新的互聯網語言。 |
4.XML的文件內容結構:
元素:指從開始標簽到結束標簽的部分(均包括開始和結束),一個元素可以包括:子元素,屬性和文本。
子元素 <people> <name></name> </people> 屬性 <sex=’男’></sex> 文本 <age>12</age> |
5.XML語法規則:
1)所有的元素都必須有開始標簽和結束標簽,省略結束標簽是非法的; 2)大小寫敏感,(比如:<people></people>和<People></People>是兩個不同的標簽; 3)xml文檔必須有根元素; 4)XML必須正確嵌套,父元素必須完全包住子元素; 5)XML屬性值必須加引號,元素的屬性值都是一個鍵值對形式。 |
第二part:Python對XML的解析的方法
常見的XML編程接口有DOM和SAX,這兩種接口處理XML文件的方式不同, 使用場合也不同。
python有三種方法解析XML:SAX,DOM和ElementTree
1)DOM(Document Object Model):
3)ElementTree(元素樹) |
xml.dom解析XML詳解介紹:
1)先定義一個data4.xml文件,如下:
2)安裝xmltodict第三方模塊:安裝的方式有兩種,一種是通過命令行 pip install xmltodict;第二種是通過pycharm的settings中搜索安裝該模塊
3)解析代碼:
#導包
import xmltodict
import json
with open("data4.xml",encoding="utf-8") as fp:
# 參數可以是字符串也可以是文件流對象
get_xml=xmltodict.parse(fp.read())
print(get_xml)
print("根標簽的屬性:",get_xml["people_info"]['@name'])
print("根標簽下people_1子標簽hegiht屬性值:",get_xml["people_info"]["people_1"]["@height"])
fp.seek(0)
#可以直接將結果轉換成json格式
print(json.dumps(xmltodict.parse(fp.read()),ensure_ascii=False))
執行結果如下:
4)需求:需要對data4.xml文件中的所有根標簽下的以people開頭的子標簽文本內容全部以字典的形式定義成一組數據,最后全部寫入到一個列表中;代碼如下:
#導包
import xmltodict
import json
def get_xml_data(input):
'''
:param input: 傳入鍵的開頭值
:return:
'''
list1=[]
with open("data4.xml",encoding="utf-8") as fp:
#解析xml得到字典格式;存在根標簽
get_result=json.loads(json.dumps(xmltodict.parse(fp.read()),ensure_ascii=False))
#取到根標簽的值然后進行遍歷鍵和值,然后再根據鍵以people開頭的標簽取出對應的值
for key,value in list(get_result.values())[0].items():
dict1={}
if str(key).startswith(input):
#子標簽可能存在屬性,屬性一般通過xmltodict轉換后得到的通常都是以@開頭的
for get_key,get_value in value.items():
if not str(get_key).startswith("@"):
dict1[get_key]=get_value
list1.append(dict1)
return list1
#調用測試代碼
print(get_xml_data("people"))
執行結果,如下: