Skip to content

存取XML

Python 可以使用內建的 xml.etree.ElementTree 模組來讀取和寫入 XML(Extensible Markup Language)


✅ 讀取 XML 檔案

1
2
3
4
5
6
7
8
9
import xml.etree.ElementTree as ET

# 讀取 XML 檔案
tree = ET.parse("data.xml")
root = tree.getroot()  # 取得根節點

# 遍歷 XML 樹狀結構
for child in root:
    print(child.tag, child.attrib, child.text)

✅ 解析 XML 字串

import xml.etree.ElementTree as ET

# XML 字串
xml_data = """
<people>
    <person id="1">
        <name>小明</name>
        <age>25</age>
    </person>
    <person id="2">
        <name>小華</name>
        <age>30</age>
    </person>
</people>
"""

# 解析 XML 字串
root = ET.fromstring(xml_data)

# 取得根節點名稱
print(root.tag)  # people

# 遍歷所有 <person> 標籤
for person in root.findall("person"):
    name = person.find("name").text
    age = person.find("age").text
    print(f"姓名: {name}, 年齡: {age}")

ET.fromstring() vs. ET.parse()

方法 用途 輸入類型
ET.fromstring(xml_data) 解析 XML 字串 str(字串)
ET.parse("file.xml") 解析 XML 檔案 file(檔案)

如果你的 XML 來自 API 或網路請求(requests 回應),通常會是 字串,這時候用 ET.fromstring() 會比較合適!


✅ 寫入 XML

import xml.etree.ElementTree as ET

# 建立 XML 根節點
root = ET.Element("people")

# 新增子節點
person = ET.SubElement(root, "person", attrib={"id": "1"})
name = ET.SubElement(person, "name")
name.text = "小明"

# 轉換為 XML 樹
tree = ET.ElementTree(root)
tree.write("output.xml", encoding="utf-8", xml_declaration=True)

如果是要輸出成字串,而不是存成檔案,可使用底下程式碼,印出XML Tree。

# 轉換為 XML 字串
xml_str = ET.tostring(root, encoding="utf-8").decode("utf-8")
print(xml_str)

如果要讓字串輸出的格式好看一點,可以使用底下程式碼。

from xml.dom.minidom import parseString

# 美化 XML
pretty_xml = parseString(xml_str).toprettyxml(indent="  ")
print(pretty_xml)

📝 總結

操作 方法
讀取 XML 檔案 ET.parse("file.xml")
獲取根節點 tree.getroot()
遍歷 XML 節點 for child in root:
建立 XML ET.Element("tag")
寫入 XML tree.write("file.xml")

🚀 簡單好用,適合處理結構化數據! 😊