คู่มือ XML ใน Python: จากไลบรารีมาตรฐานถึง lxml

1. บทนำ

Python เป็นภาษาโปรแกรมที่มีความยืดหยุ่น สามารถจัดการรูปแบบข้อมูลที่หลากหลายได้อย่างง่ายดาย โดยเฉพาะ XML(Extensible Markup Language) นิยมใช้สำหรับการแลกเปลี่ยนและการจัดเก็บข้อมูลแบบมีโครงสร้าง และถูกใช้อย่างแพร่หลายในความตอบกลับของ API และไฟล์กำหนดค่า ใน Python คุณสามารถจัดการ XML ได้อย่างง่ายดายด้วยไลบรารีมาตรฐานและไลบรารีภายนอก บทความนี้จะอธิบายอย่างเข้าใจง่ายตั้งแต่การใช้งานพื้นฐานไปจนถึงขั้นประยุกต์ของ XML ด้วย Python

2. แนะนำไลบรารีสำหรับจัดการ 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" โค้ดนี้จะอ่านไฟล์ 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 การจัดการ 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 จริงโดยอ้างอิงโค้ดที่แนะนำไว้ในบทความนี้ดู
年収訴求