Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

XML Parsing ใน Python ด้วย ElementTree API

Python xml.etree.ElementTree เป็น API ที่ใช้งานง่ายที่สุดสำหรับ parse, แก้ไข และสร้างเอกสาร XML

1. สร้างไฟล์ XML ใหม่

import xml.etree.ElementTree as ET

def create_xml(filename):
    root = ET.Element("users")
    child1 = ET.Element("user")
    root.append(child1)
    
    tree = ET.ElementTree(root)
    with open(filename, "wb") as fh:
        tree.write(fh)

if __name__ == "__main__":
    create_xml("testXML.xml")

ผลลัพธ์ (testXML.xml):

<users><user /></users>

2. เพิ่มค่าให้ Element (SubElement)

def create_xml(filename):
    root = ET.Element("users")
    child1 = ET.Element("user")
    root.append(child1)
    
    # เพิ่ม sub-element
    user_id = ET.SubElement(child1, "Id")
    user_id.text = "hello"
    
    user_name = ET.SubElement(child1, "Name")
    user_name.text = "Rajesh"
    
    tree = ET.ElementTree(root)
    with open(filename, "wb") as fh:
        tree.write(fh)

ผลลัพธ์:

<users>
  <user>
    <Id>hello</Id>
    <Name>Rajesh</Name>
  </user>
</users>

3. แก้ไขข้อมูล XML ที่มีอยู่

ไฟล์ newdata.xml ต้นฉบับ:

<users>
  <user>
    <id>1a</id>
    <name>Rajesh</name>
    <salary>NA</salary>
  </user>
  <user>
    <id>2b</id>
    <name>TutorialsPoint</name>
    <salary>NA</salary>
  </user>
  <user>
    <id>3c</id>
    <name>Others</name>
    <salary>NA</salary>
  </user>
</users>

โปรแกรมอัปเดต salary:

import xml.etree.ElementTree as ET

def update_xml(filename):
    tree = ET.ElementTree(file=filename)
    root = tree.getroot()
    
    # วนลูปหา salary ทุกตัว แล้วแก้ค่า
    for salary in root.iter('salary'):
        salary.text = '500000'
    
    tree = ET.ElementTree(root)
    with open(filename, "wb") as fh:
        tree.write(fh)

if __name__ == "__main__":
    update_xml("newdata.xml")

4. Parse XML และแสดงข้อมูล

import xml.etree.cElementTree as ET

def parse_xml(file_name):
    tree = ET.ElementTree(file=file_name)
    root = tree.getroot()
    
    print(f"tag={root.tag}, attrib={root.attrib}")
    print("-" * 25)
    print("Iterating using getchildren()")
    print("-" * 25)
    
    users = root.getchildren()  # หรือ list(root) ใน Python 3.9+
    for user in users:
        for child in user:
            print(f"{child.tag}={child.text}")

if __name__ == "__main__":
    parse_xml("newdata.xml")

ผลลัพธ์:

tag=users, attrib={}
-------------------------
Iterating using getchildren()
-------------------------
id=1a
name=Rajesh
salary=500000
id=2b
name=TutorialsPoint
salary=500000
id=3c
name=Others
salary=500000

เมธอดสำคัญของ ElementTree

เมธอด คำอธิบาย
ET.Element(tag)สร้าง element ใหม่
ET.SubElement(parent, tag)สร้าง child element
element.textได้/ตั้งค่า text content
element.attribดิกชันนารีของ attributes
root.iter(tag)วนลูปหา element ทั้งหมดแบบ recursive
root.find(tag)หา child แรกที่ match
root.findall(tag)หา child ทั้งหมดที่ match
tree.write(file)เขียน XML ลงไฟล์

หมายเหตุ

  • ใช้ xml.etree.cElementTree สำหรับประสิทธิภาพสูงกว่า (C implementation)
  • Python 3.9+ ใช้ list(root) แทน root.getchildren() (deprecated)
  • เขียนไฟล์ใช้โหมด 'wb' (binary) เพื่อป้องกันปัญหา encoding