目次
1. บทนำ
Python เป็นภาษาโปรแกรมที่มีความยืดหยุ่น สามารถจัดการรูปแบบข้อมูลที่หลากหลายได้อย่างง่ายดาย โดยเฉพาะ XML(Extensible Markup Language) นิยมใช้สำหรับการแลกเปลี่ยนและการจัดเก็บข้อมูลแบบมีโครงสร้าง และถูกใช้อย่างแพร่หลายในความตอบกลับของ API และไฟล์กำหนดค่า ใน Python คุณสามารถจัดการ XML ได้อย่างง่ายดายด้วยไลบรารีมาตรฐานและไลบรารีภายนอก บทความนี้จะอธิบายอย่างเข้าใจง่ายตั้งแต่การใช้งานพื้นฐานไปจนถึงขั้นประยุกต์ของ XML ด้วย Python2. แนะนำไลบรารีสำหรับจัดการ XML ด้วย Python
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"
โค้ดนี้จะอ่านไฟล์ XML ชื่อdata.xml
และแสดงแท็กขององค์ประกอบรูท คุณสามารถตรวจสอบได้ว่าผลลัพธ์เป็น “data”. - การจัดการข้อผิดพลาดเมื่อไฟล์ไม่พบ:
หากไฟล์ไม่มีอยู่จะเกิด
FileNotFoundError
ขึ้น คุณสามารถเพิ่มการจัดการข้อยกเว้นได้ดังนี้:try: tree = ET.parse('data.xml') root = tree.getroot() except FileNotFoundError: print("ไม่พบไฟล์")
2.2 ไลบรารีภายนอก:lxml
หากต้องการการทำงานกับ XML ขั้นสูง แนะนำให้ใช้ไลบรารีlxml
โดยlxml
รองรับการประมวลผล XML ที่ทรงพลังด้วย XPath และ XSLT ทำให้งานที่ยากจะทำด้วยไลบรารีมาตรฐานสามารถทำได้อย่างง่ายดาย。- การดึงองค์ประกอบด้วย XPath:
from lxml import etree tree = etree.parse('data.xml') countries = tree.xpath('//country[@name="Liechtenstein"]') print(countries[0].tag) # ผลลัพธ์: "country"
โค้ดนี้จะดึงองค์ประกอบcountry
ที่มีแอตทริบิวต์name
เท่ากับ “Liechtenstein”.

3. การพาร์สและการจัดการ XML
3.1 ขั้นตอนการพาร์สพื้นฐาน
ในการพาร์สไฟล์ XML และจัดการโครงสร้างแบบต้นไม้ ให้ใช้parse()
ของ xml.etree.ElementTree
เมธอดนี้จะอ่านไฟล์ XML และดึงองค์ประกอบรากของต้นไม้ออกมา- การพาร์สจากไฟล์:
import xml.etree.ElementTree as ET tree = ET.parse('example.xml') root = tree.getroot() print(root.tag) # ผลลัพธ์: "rootTag"
โค้ดนี้จะอ่านไฟล์ XMLexample.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 การจัดการ XML ขั้นสูงด้วย lxml
lxml
ไลบรารีช่วยให้คุณสามารถทำการค้นหาที่ซับซ้อนด้วย XPath และแปลง XML เป็นรูปแบบอื่นๆ ด้วย XSLT ได้- การค้นหาองค์ประกอบด้วย XPath:
from lxml import etree tree = etree.parse('data.xml') countries = tree.xpath('//country') for country in countries: print(country.get('name'))
5.2 การแปลง XML ด้วย XSLT
ต่อไปนี้เป็นตัวอย่างการแปลง 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. สรุป
เมื่อทำงานกับ XML ใน Python การใช้ไลบรารีมาตรฐานxml.etree.ElementTree
จะทำให้การจัดการ XML ขั้นพื้นฐานเป็นเรื่องง่าย นอกจากนี้ การใช้lxml
ยังทำให้สามารถดำเนินการขั้นสูง เช่น XPath และ XSLT ได้ ลองลงมือจัดการ XML จริงโดยอ้างอิงโค้ดที่แนะนำไว้ในบทความนี้ดู