Python 的 XML 處理全面解說|從標準函式庫到 lxml 的完整指南

1. 前言

Python 是一種靈活的程式語言,能夠輕鬆處理各種資料格式。其中,XML(可擴展標記語言)經常被用於交換和儲存結構化資料,廣泛應用於 API 回應與設定檔。在 Python 中,可以使用標準函式庫或第三方函式庫輕鬆操作 XML。本文將從基礎到進階,詳細說明如何使用 Python 來處理 XML,並搭配實用的程式碼範例協助理解。

2. Python 中處理 XML 的函式庫介紹

2.1 標準函式庫:xml.etree.ElementTree

Python 的標準函式庫 xml.etree.ElementTree 是一個非常實用的工具,可以輕鬆讀取與寫入 XML 檔案,並對樹狀結構進行搜尋與編輯。

  • 基本解析: import xml.etree.ElementTree as ET tree = ET.parse('data.xml') root = tree.getroot() print(root.tag) # 輸出: "data"
    這段程式碼讀取名為 data.xml 的 XML 檔案,並顯示根元素的標籤。輸出結果會是「data」。
  • 當檔案不存在時的錯誤處理:
    如果檔案不存在,會拋出 FileNotFoundError,因此可加入以下例外處理:
    try: tree = ET.parse('data.xml') root = tree.getroot() except FileNotFoundError: print("找不到檔案。")

2.2 外部函式庫:lxml

若需要進行更高階的 XML 操作,建議使用 lxml 函式庫。lxml 支援強大的 XPath 和 XSLT 處理功能,可以簡化許多標準函式庫難以完成的操作。

  • 使用 XPath 取得元素:
    from lxml import etree tree = etree.parse('data.xml') countries = tree.xpath('//country[@name="Liechtenstein"]') print(countries[0].tag) # 輸出: "country"
    這段程式碼會取得 name 屬性為「Liechtenstein」的 country 元素。
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. XML 的解析與操作

3.1 基本解析步驟

若要解析 XML 檔案並操作其樹狀結構,可以使用 xml.etree.ElementTreeparse() 方法。此方法會讀取 XML 檔案並取得樹的根元素。

  • 從檔案解析:
    import xml.etree.ElementTree as ET tree = ET.parse('example.xml') root = tree.getroot() print(root.tag) # 輸出: "rootTag"
    這段程式碼會讀取 XML 檔案 example.xml,並顯示根元素的標籤名稱。

3.2 元素搜尋與屬性操作

要搜尋 XML 元素時,可以使用 find()findall() 方法。透過這些方法可以輕鬆取得特定元素或其屬性。

  • 搜尋元素並取得屬性:
    country = root.find('country') print(country.get('name')) # 輸出: "Liechtenstein"
  • 操作屬性:
    若要操作 XML 元素的屬性,可以使用 get() 來取得,使用 set() 來設定。
    country.set('currency', 'CHF') print(country.attrib) # 輸出: {'name': 'Liechtenstein', 'currency': 'CHF'}

4. 編輯與儲存 XML

4.1 編輯元素的方法

可以透過修改 XML 元素的文字或屬性,來編輯 XML 的內容。以下是修改元素文字的範例:

  • 編輯元素文字:
    rank = root.find('.//rank') rank.text = '2' print(rank.text) # 輸出: "2"

4.2 將 XML 寫入檔案

若要將修改後的 XML 儲存到檔案中,可以使用 write() 方法。

  • 儲存 XML:
    tree.write('updated_data.xml')

5. 使用外部函式庫進行進階處理

5.1 使用 lxml 進行進階的 XML 操作

透過 lxml 函式庫,可以進行複雜的 XPath 查詢,或使用 XSLT 將 XML 轉換為其他格式。

  • 使用 XPath 搜尋元素:
    from lxml import etree tree = etree.parse('data.xml') countries = tree.xpath('//country') for country in countries: print(country.get('name'))

5.2 使用 XSLT 轉換 XML

以下是一個將 XML 轉換成 HTML 的範例,使用的是 XSLT。

  • 從 XML 轉換為 HTML:
    from lxml import etree xml_tree = etree.parse('data.xml') xsl_tree = etree.parse('style.xsl') transform = etree.XSLT(xsl_tree) result_tree = transform(xml_tree) result_tree.write('output.html', pretty_print=True)

6. 實作:範例程式碼與解說

6.1 從 XML 中提取資料的範例

這是一個從 XML 檔案中提取資料並顯示特定資訊的範例程式碼。

  • 範例程式碼:
    import xml.etree.ElementTree as ET tree = ET.parse('data.xml') root = tree.getroot() for country in root.findall('country'): name = country.get('name') rank = country.find('rank').text print(f"Country: {name}, Rank: {rank}")

6.2 編輯並儲存 XML 的範例

這是一個修改 XML 元素數值並儲存變更後檔案的範例程式碼。

  • 範例程式碼:
    import xml.etree.ElementTree as ET tree = ET.parse('data.xml') root = tree.getroot() rank = root.find('.//rank') rank.text = '2' tree.write('updated_data.xml')
侍エンジニア塾

7. 結語

在 Python 中處理 XML,可以使用標準函式庫 xml.etree.ElementTree 來進行基本操作,這非常簡單易用。如果需要進階功能,像是 XPath 或 XSLT 的處理,可以透過 lxml 來實現。請參考本文中的程式碼範例,親自試著操作看看,提升你的 XML 處理技巧。