
- Python 資料持久化教程
- Python 資料持久化 - 首頁
- Python 資料持久化 - 簡介
- Python 資料持久化 - 檔案 API
- 使用 os 模組處理檔案
- Python 資料持久化 - 物件序列化
- Python 資料持久化 - Pickle 模組
- Python 資料持久化 - Marshal 模組
- Python 資料持久化 - Shelve 模組
- Python 資料持久化 - dbm 包
- Python 資料持久化 - CSV 模組
- Python 資料持久化 - JSON 模組
- Python 資料持久化 - XML 解析器
- Python 資料持久化 - Plistlib 模組
- Python 資料持久化 - Sqlite3 模組
- Python 資料持久化 - SQLAlchemy
- Python 資料持久化 - PyMongo 模組
- Python 資料持久化 - Cassandra 驅動程式
- 資料持久化 - ZODB
- 資料持久化 - Openpyxl 模組
- Python 資料持久化資源
- Python 資料持久化 - 快速指南
- Python 資料持久化 - 有用資源
- Python 資料持久化 - 討論
Python 資料持久化 - XML 解析器
XML 是 **可擴充套件標記語言** 的縮寫。它是一種可移植的、開源的、跨平臺的語言,非常類似於 HTML 或 SGML,並得到全球資訊網聯盟的推薦。
它是一種眾所周知的的資料交換格式,被大量應用程式使用,例如 Web 服務、辦公工具和 **面向服務的架構** (SOA)。XML 格式既可由機器讀取,也可由人類讀取。
標準 Python 庫的 xml 包包含以下用於 XML 處理的模組:
序號 | 模組及描述 |
---|---|
1 |
xml.etree.ElementTree ElementTree API,一個簡單輕量的 XML 處理器 |
2 |
xml.dom DOM API 定義 |
3 |
xml.dom.minidom 一個最小的 DOM 實現 |
4 |
xml.sax SAX2 介面實現 |
5 |
xml.parsers.expat Expat 解析器繫結 |
XML 文件中的資料以樹狀的層次結構格式排列,從根節點和元素開始。每個元素都是樹中的一個節點,並且具有包含在 <> 和 </> 標記中的屬性。可以為每個元素分配一個或多個子元素。
以下是一個典型的 XML 文件示例:
<?xml version = "1.0" encoding = "iso-8859-1"?> <studentlist> <student> <name>Ratna</name> <subject>Physics</subject> <marks>85</marks> </student> <student> <name>Kiran</name> <subject>Maths</subject> <marks>100</marks> </student> <student> <name>Mohit</name> <subject>Biology</subject> <marks>92</marks> </student> </studentlist>
在使用 **ElementTree** 模組時,第一步是設定樹的根元素。每個元素都有一個標籤和一個 attrib,它是一個字典物件。對於根元素,attrib 是一個空字典。
import xml.etree.ElementTree as xmlobj root=xmlobj.Element('studentList')
現在,我們可以在根元素下新增一個或多個元素。每個元素物件可能具有 **子元素**。每個子元素都有一個屬性和一個文字屬性。
student=xmlobj.Element('student') nm=xmlobj.SubElement(student, 'name') nm.text='name' subject=xmlobj.SubElement(student, 'subject') nm.text='Ratna' subject.text='Physics' marks=xmlobj.SubElement(student, 'marks') marks.text='85'
這個新元素使用 append() 方法附加到根元素。
root.append(student)
使用上述方法追加任意數量的元素。最後,根元素物件被寫入檔案。
tree = xmlobj.ElementTree(root) file = open('studentlist.xml','wb') tree.write(file) file.close()
現在,我們來看看如何解析 XML 檔案。為此,在 ElementTree 建構函式中,以檔案引數的形式提供檔名來構建文件樹。
tree = xmlobj.ElementTree(file='studentlist.xml')
樹物件具有 **getroot()** 方法來獲取根元素,getchildren() 返回其下方的元素列表。
root = tree.getroot() children = root.getchildren()
透過迭代每個子節點的子元素集合,構建與每個子元素對應的字典物件。
for child in children: student={} pairs = child.getchildren() for pair in pairs: product[pair.tag]=pair.text
然後將每個字典追加到一個列表中,返回原始的字典物件列表。
**SAX** 是一個用於事件驅動的 XML 解析的標準介面。使用 SAX 解析 XML 需要透過繼承 xml.sax.ContentHandler 來建立內容處理器。您為感興趣的事件註冊回撥,然後讓解析器遍歷文件。
當您的文件很大或記憶體有限時,SAX 很有用,因為它在從磁碟讀取檔案時解析檔案,因此整個檔案永遠不會儲存在記憶體中。
文件物件模型
(DOM) API 是全球資訊網聯盟的一項推薦。在這種情況下,整個檔案被讀入記憶體並存儲在層次結構(基於樹)的形式中,以表示 XML 文件的所有特性。
對於大型檔案,SAX 的速度不如 DOM。另一方面,如果在許多小檔案上使用 DOM,它可能會消耗大量資源。SAX 是隻讀的,而 DOM 允許更改 XML 檔案。