最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python XML 基本操作示例詳解

 更新時間:2025年07月23日 09:29:48   作者:海哥編程  
文章介紹XML作為可擴展標記語言,用于數(shù)據(jù)傳輸和存儲,詳解Python解析XML的三種方法:DOM(內(nèi)存大、解析慢)、SAX(流式處理、速度快但數(shù)據(jù)易丟)、ElementTree(兼顧兩者優(yōu)勢),并提供示例代碼,感興趣的朋友一起看看吧

1. 概述

XML(Extensible Markup Language)中文譯為可擴展標記語言,它是一種簡單、靈活、易擴展的文本格式,它主要關注數(shù)據(jù)內(nèi)容,常用來傳送、存儲數(shù)據(jù)。

當通過 XML 來傳送數(shù)據(jù)時,自然會涉及到 XML 的解析工作,通常 Python 可以通過如下三種方式來解析 XML:

  • DOM
    DOM 方式會將整個 XML 讀入內(nèi)存,在內(nèi)存中解析成一個樹,通過對樹的操作來操作 XML,該方式占用內(nèi)存較大,解析速度較慢。

  • SAX
    SAX 方式逐行掃描 XML 文檔,邊掃描邊解析,占用內(nèi)存較小,速度較快,缺點是不能像 DOM 方式那樣長期留駐在內(nèi)存,數(shù)據(jù)不是長久的,事件過后,若沒保存數(shù)據(jù),數(shù)據(jù)會丟失。

  • ElementTree
    ElementTree 方式幾乎兼具了 DOM 方式與 SAX 方式的優(yōu)點,占用內(nèi)存較小、速度較快、使用也較為簡單。

2. 寫入

首先,我們通過 Python 創(chuàng)建一個 XML 文檔并向其中寫入一些數(shù)據(jù),實現(xiàn)代碼如下所示:

from xml.etree import ElementTree as et
import xml.dom.minidom as minidom
# 創(chuàng)建根節(jié)點 
root = et.Element('school')
names = ['張三', '李四']
genders = ['男', '女']
ages = ['20', '18']
# 添加子節(jié)點
student1 = et.SubElement(root, 'student')
student2 = et.SubElement(root, 'student')
et.SubElement(student1, 'name').text = names[0]
et.SubElement(student1, 'gender').text = genders[0]
et.SubElement(student1, 'age').text = ages[0]
et.SubElement(student2, 'name').text = names[1]
et.SubElement(student2, 'gender').text = genders[1]
et.SubElement(student2, 'age').text = ages[1]
# 將根目錄轉(zhuǎn)化為樹行結(jié)構(gòu)
tree = et.ElementTree(root)
rough_str = et.tostring(root, 'utf-8')
# 格式化
reparsed = minidom.parseString(rough_str)
new_str = reparsed.toprettyxml(indent='\t')
f = open('test.xml', 'w', encoding='utf-8')
# 保存
f.write(new_str)
f.close()

看一下效果:

3. 解析

我們分別使用 DOM、SAX、ElementTree 方式解析上面生成的 XML 文件。

3.1 DOM 方式

看一下如何通過 DOM 方式進行解析,實現(xiàn)代碼如下所示:

from xml.dom.minidom import parse
# 讀取文件
dom = parse('test.xml')
# 獲取文檔元素對象
elem = dom.documentElement
# 獲取 student
stus = elem.getElementsByTagName('student')
for stu in stus:
	# 獲取標簽中內(nèi)容
    name = stu.getElementsByTagName('name')[0].childNodes[0].nodeValue
    gender = stu.getElementsByTagName('gender')[0].childNodes[0].nodeValue
    age = stu.getElementsByTagName('age')[0].childNodes[0].nodeValue
    print('name:', name, ', gender:', gender, ', age:', age)

執(zhí)行結(jié)果:

name: 張三 , gender: 男 , age: 20
name: 李四 , gender: 女 , age: 18

3.2 SAX 方式

看一下如何通過 SAX 方式進行解析,實現(xiàn)代碼如下所示:

import xml.sax
class StudentHandler(xml.sax.ContentHandler):
    def __init__(self):
        self.name = ''
        self.age = ''
        self.gender = ''
    # 元素開始調(diào)用
    def startElement(self, tag, attributes):
        self.CurrentData = tag
    # 元素結(jié)束調(diào)用
    def endElement(self, tag):
        if self.CurrentData == 'name':
            print('name:', self.name)
        elif self.CurrentData == 'gender':
            print('gender:', self.gender)
        elif self.CurrentData == 'age':
            print('age:', self.age)
        self.CurrentData = ''
    # 讀取字符時調(diào)用
    def characters(self, content):
        if self.CurrentData == 'name':
            self.name = content
        elif self.CurrentData ==  'gender':
            self.gender = content
        elif self.CurrentData ==  'age':
            self.age = content
if (__name__ == "__main__"):
    # 創(chuàng)建 XMLReader
    parser = xml.sax.make_parser()
    # 關閉命名空間
    parser.setFeature(xml.sax.handler.feature_namespaces, 0)
    # 重寫 ContextHandler
    Handler = StudentHandler()
    parser.setContentHandler(Handler)
    parser.parse('test.xml')

執(zhí)行結(jié)果:

name: 張三
gender: 男
age: 20
name: 李四
gender: 女
age: 18

3.3 ElementTree 方式

看一下如何通過 ElementTree 方式進行解析,實現(xiàn)代碼如下所示:

import xml.etree.ElementTree as et
tree = et.parse('test.xml')
# 根節(jié)點
root = tree.getroot()
for stu in root:
    print('name:', stu[0].text, ', gender:', stu[1].text, ', age:', stu[2].text)

執(zhí)行結(jié)果:

name: 張三 , gender: 男 , age: 20
name: 李四 , gender: 女 , age: 18

到此這篇關于Python XML 基本操作的文章就介紹到這了,更多相關Python XML 操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python操作注冊表的方法實現(xiàn)

    python操作注冊表的方法實現(xiàn)

    Python提供了winreg模塊,可以用于操作Windows注冊表,本文就來介紹一下python操作注冊表的方法實現(xiàn),主要包括打開注冊表、讀取注冊表值、寫入注冊表值和關閉注冊表,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • 如何利用python獲取鼠標點擊的實時位置案例

    如何利用python獲取鼠標點擊的實時位置案例

    這篇文章主要給大家介紹了關于如何利用python獲取鼠標點擊的實時位置,并展示了如何安裝和使用該庫,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • 詳解pycharm自動import所需的庫的操作方法

    詳解pycharm自動import所需的庫的操作方法

    這篇文章主要介紹了pycharm自動import所需的庫的操作方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Python抓取數(shù)據(jù)到可視化全流程的實現(xiàn)過程

    Python抓取數(shù)據(jù)到可視化全流程的實現(xiàn)過程

    這篇文章主要介紹了Python抓取數(shù)據(jù)到可視化全流程的實現(xiàn)過程,
    2022-01-01
  • Python實現(xiàn)自動識別并批量轉(zhuǎn)換文本文件編碼

    Python實現(xiàn)自動識別并批量轉(zhuǎn)換文本文件編碼

    這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)自動識別并批量轉(zhuǎn)換文本文件編碼的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-03-03
  • Python面向?qū)ο缶幊讨惖倪M階

    Python面向?qū)ο缶幊讨惖倪M階

    這篇文章主要介紹了Python面向?qū)ο缶幊讨惖囊茫?Reference是對象的指針,引用是內(nèi)存中真實對象的指針,表示為變量名或者內(nèi)存地址、每個對象存在至少一個引用,id()函數(shù)用于獲得引用,想具體了解的小伙伴可以參考下面文章的內(nèi)容
    2021-11-11
  • python中的pygame實現(xiàn)接球小游戲

    python中的pygame實現(xiàn)接球小游戲

    這篇文章主要介紹了python中的pygame實現(xiàn)接球小游戲,文章基于python的相關資料展開詳細的內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • 使用Python創(chuàng)建一個視頻管理器并實現(xiàn)視頻截圖功能

    使用Python創(chuàng)建一個視頻管理器并實現(xiàn)視頻截圖功能

    在這篇博客中,我將向大家展示如何使用 wxPython 創(chuàng)建一個簡單的圖形用戶界面 (GUI) 應用程序,該應用程序可以管理視頻文件列表、播放視頻,并生成視頻截圖,我們將逐步實現(xiàn)這些功能,并確保代碼易于理解和擴展,感興趣的小伙伴跟著小編一起來看看吧
    2024-08-08
  • Python如何判斷字符串中是否包含特殊字符并替換

    Python如何判斷字符串中是否包含特殊字符并替換

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)判斷字符串中是否包含特殊字符并使用空字符串替換掉,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2025-05-05
  • python格式化輸出%s與format()的用法對比

    python格式化輸出%s與format()的用法對比

    這篇文章主要為大家介紹了python格式化輸出%s與format()的用法對比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10

最新評論

太仆寺旗| 新兴县| 镇原县| 石首市| 自贡市| 荥阳市| 安新县| 青州市| 张家口市| 阳泉市| 苍溪县| 丽江市| 南安市| 长葛市| 泰州市| 酒泉市| 永安市| 塔河县| 大洼县| 荔浦县| 屏山县| 嵊泗县| 无为县| 十堰市| 武义县| 时尚| 齐齐哈尔市| 德州市| 甘洛县| 威海市| 中江县| 翁牛特旗| 安化县| 天门市| 威海市| 喀喇| 万全县| 正宁县| 宜兴市| 渭源县| 准格尔旗|