python 對xml檔案的操作

2021-09-10 06:25:46 字數 2923 閱讀 8243

有用請點贊,沒用請差評。

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 parse

import 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標明此檔案中所使用的字元型別,可...