XML教程:從入門到精通

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ESULX的頭像ESULX
上一篇 2025-01-20 14:10
下一篇 2025-01-20 14:10

相關推薦

  • Python wordcloud入門指南

    如何在Python中使用wordcloud庫生成文字雲? 一、安裝和導入wordcloud庫 在使用wordcloud前,需要保證庫已經安裝並導入: !pip install wo…

    編程 2025-04-29
  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Python小波分解入門指南

    本文將介紹Python小波分解的概念、基本原理和實現方法,幫助初學者掌握相關技能。 一、小波變換概述 小波分解是一種廣泛應用於數字信號處理和圖像處理的方法,可以將信號分解成多個具有…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • Python豎線圖:從入門到精通

    Python豎線圖,即Python的繪圖工具matplotlib中的一種圖形類型,具有直觀、易於理解的特點,適用於各種數據分析和可視化場景。本文從初學者角度出發,介紹Python豎…

    編程 2025-04-29
  • Python煙花教程

    Python煙花代碼在近年來越來越受到人們的歡迎,因為它可以讓我們在終端里玩煙花,不僅具有視覺美感,還可以通過代碼實現動畫和音效。本教程將詳細介紹Python煙花代碼的實現原理和模…

    編程 2025-04-29

發表回復

登錄後才能評論