一. 什麼是XML
XML,即可擴展標記語言(eXtensible Markup Language),是一種可以用於描述、存儲和傳輸數據的標準格式。相較於HTML,XML更加靈活,可以自定義標記,非常適合用於不同系統間的數據交互和數據存儲。下面我們來看下一個簡單的XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="001">
<name>Tom</name>
<age>18</age>
<gender>male</gender>
</student>
<student id="002">
<name>Lucy</name>
<age>20</age>
<gender>female</gender>
</student>
</students>
在上述示例中,<?xml version=”1.0″ encoding=”UTF-8″?>表示該文檔是一個XML文檔,且版本為1.0,採用UTF-8編碼。<students>和</students>用於表示該文檔的根元素,其中包含了兩個子元素<student>,它們都包含了三個子元素<name>、<age>、<gender>,同時還有一個id屬性。
二. XML文檔結構
XML文檔有以下幾個關鍵部分:
- XML聲明:<?xml version=”1.0″ encoding=”UTF-8″?>
- DTD:文檔類型定義,定義了文檔的元素、屬性、順序等規則;
- 根元素:文檔的最外層元素,其他所有元素都是其子元素、孫子元素等;
- 注釋:<!–這是一條注釋–>;
- 其他元素:可以包含屬性、文本、子元素等。
三. 常用XML元素
XML定義了很多元素用於描述數據,下面我們列舉幾個常用的元素:
- <element>:用於定義元素,可以設置屬性和子元素;
- <attribute>:用於定義元素的屬性;
- <data>:用於存儲數據;
- <comment>:用於添加註釋。
四. XML解析
XML文檔在不同系統間的傳輸和存儲需要進行解析,常用的解析方式有DOM解析和SAX解析。
1. DOM解析
DOM解析會將整個XML文檔解析為一個樹形結構,將所有元素都存儲在內存中,適合逐個訪問和處理每個元素的場景。下面是使用Python的minidom模塊解析XML文檔的示例:
import xml.dom.minidom
# 打開XML文檔
doc = xml.dom.minidom.parse("students.xml")
# 獲取根元素
root = doc.documentElement
# 獲取所有student元素
students = root.getElementsByTagName("student")
for student in students:
# 獲取id屬性和name元素的值
print("id:", student.getAttribute("id"), "name:", student.getElementsByTagName("name")[0].childNodes[0].data)
2. SAX解析
SAX解析是一種基於事件驅動的解析方式,適合處理大型文件和性能要求高的場景。它通過解析器逐行讀取文檔,遇到元素、屬性、文本等事件都會觸發相應的回調函數。下面是使用Python的xml.sax模塊解析XML文檔的示例:
import xml.sax
class StudentHandler(xml.sax.ContentHandler):
def __init__(self):
self.id = ""
self.name = ""
self.age = ""
self.gender = ""
# 元素開始事件
def startElement(self, tag, attributes):
if tag == "student":
self.id = attributes["id"]
# 元素結束事件
def endElement(self, tag):
if tag == "name":
print("id:", self.id, "name:", self.name)
elif tag == "age":
print("id:", self.id, "age:", self.age)
elif tag == "gender":
print("id:", self.id, "gender:", self.gender)
# 字符串事件
def characters(self, content):
if self.id != "":
if content.isspace():
return
elif self.name == "":
self.name = content
elif self.age == "":
self.age = content
elif self.gender == "":
self.gender = content
if __name__ == "__main__":
# 創建解析器
parser = xml.sax.make_parser()
# 關閉命名空間
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# 設置回調
handler = StudentHandler()
parser.setContentHandler(handler)
# 解析XML文檔
parser.parse("students.xml")
五. XML的應用
下面列舉幾個XML的應用場景:
- Web服務中的傳輸和交換數據;
- 配置文件的存儲和讀取;
- 異構系統間的數據交換;
- 語言中的富文本存儲和傳輸。
原創文章,作者:ESULX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/331543.html
微信掃一掃
支付寶掃一掃