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