一. 什麼是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-hk/n/331543.html