有用請點贊,沒用請差評。
python解析xml常見的有三種方法:一是xml.dom.*模組,它是w3c dom api的實現,若需要處理dom api則該模組很適合;二是xml.sax.*模組,它是sax api的實現,這個模組犧牲了便捷性來換取速度和記憶體占用,sax是乙個基於事件的api,這就意味著它可以「在空中」處理龐大數量的的文件,不用完全載入進記憶體;三是xml.etree.elementtree模組(簡稱 et),它提供了輕量級的python式的api,相對於dom來說et 快了很多,而且有很多令人愉悅的api可以使用,相對於sax來說et的et.iterparse也提供了 「在空中」 的處理方式,沒有必要載入整個文件到記憶體,et的效能的平均值和sax差不多,但是api的效率更高一點而且使用起來很方便。
以dom樹來解析更直觀,所以筆者只示例第一種、第三種的寫法。
1.1 xml.dom.minidom
檔案物件模型(document object model,簡稱dom),是w3c組織推薦的處理可擴充套件置標語言的標準程式設計介面。乙個 dom 的解析器在解析乙個xml文件時,一次性讀取整個文件,把文件中所有元素儲存在記憶體中的乙個樹結構裡,之後你可以利用dom 提供的不同的函式來讀取或修改文件的內容和結構,也可以把修改過的內容寫入xml檔案。python中用xml.dom.minidom來解析xml檔案。
以一段web漏洞說明xml檔案為例(:
test.xml
<?xml version="1.0" encoding="utf-8"?>
* *
採用dom樹解析:
from xml.dom.minidom import parseimport xml.dom.minidom
import os
xml_file="d:\\python3_anaconda3\\學習\\test\\test.xml"
# 使用minidom解析器開啟 xml 文件,得到文件物件
domtree = xml.dom.minidom.parse(xml_file)
#得到元素物件
collection = domtree.documentelement
#獲得子標籤
target_tag = collection.getelementsbytagname("testdescription")
print(type(target_tag))
# 獲得標籤屬性值
print(target_tag[0].getattribute('severity'))
# 獲取os標籤
target_tag2 = collection.getelementsbytagname("os")
# 獲取標籤對之間的資料
print(target_tag2[0].firstchild.data)
print("*"*20)
#修改xml屬性或者標籤對資料
target_tag[0].setattribute('severity','medium')
target_tag2[0].firstchild.data='no'
#注意必須要重新寫入檔案,可以是新檔案或者old檔案
elementtree在python標準庫中有兩種實現:一種是純python實現的,如xml.etree.elementtree,另一種是速度快一點的xml.etree.celementtree。盡量使用c語言實現的那種,因為它速度更快,而且消耗的記憶體更少。
import xml.etree.elementtree as et
xml_file="d:\\python3_anaconda3\\學習\\test\\test.xml"
tree = et.parse(xml_file)
print("tree type:", type(tree))
# 獲得根節點
root = tree.getroot()
print ("root type:", type(root))
print (root.tag, "----", root.attrib)
#使用下標訪問
print (root[0][0].tag)
print (root[0][0].text)
# 遍歷root[0][1]的下一層
for child in root[0][1][0]:
print("遍歷root的下一層", child.tag, "----", child.attrib)
#根據標籤名查詢
captionlist = root[0][1][0].findall("os")
print(len(captionlist))
print(captionlist[0].tag,":",captionlist[0].text)
print("*"*20)
# 修改xml檔案
需要注意的是,修改xml檔案之後,必須要重新寫入檔案,否則修改不成功。xml_file若是源檔名則完成修改操作,若是新新檔名,則將修改後的檔案儲存在乙個新檔案裡面,原始檔案不做修改。
python的xml檔案操作
python中xml的操作可以使用dom庫 sax庫 etree庫 這個是新的 parsers庫。其中dom.minidom是dom輕量級模組,這裡介紹dom.minidom和etree兩個模組這裡以userinfo.xml檔案為例,xml 內容如下 xml解析 xmldoc minidom.par...
Python 操作XML檔案
1 xml 建立 1 import xml.etree.elementtree as et 23 new xml et.element personinfolist 最外面的標籤名 4 personinfo et.subelement new xml,personinfo attrib 對應的引數是...
Python操作XML檔案 XML概述
xml 可擴充套件標置語言,為html 超文字標置語言 的補充。html用於顯示資料,而xml用於傳輸和儲存資料 一.xml語法 xml檔案通常分為兩部分 檔案宣告和檔案主體 檔案宣告 位於第一行 version標明此檔案所用的標準的版本號,必須要有 encoding標明此檔案中所使用的字元型別,可...