xml.parsers.expat เป็น non-validating XML parser แบบ event-driven (SAX-style) เร็วและประหยัดหน่วยความจำ
Handler Functions
StartElementHandler(tag, attrs): เปิดแท็กEndElementHandler(tag): ปิดแท็กCharacterDataHandler(data): ข้อความภายในแท็ก
ตัวอย่าง
import xml.parsers.expat
def start_element(tag, attrs):
print(f"Start: {tag}, Attrs: {attrs}")
def end_element(tag):
print(f"End: {tag}")
def char_data(data):
if data.strip():
print(f"Data: {repr(data)}")
parser = xml.parsers.expat.ParserCreate()
parser.StartElementHandler = start_element
parser.EndElementHandler = end_element
parser.CharacterDataHandler = char_data
xml_data = """
Strive for progress, not perfection
There are no shortcuts to any place worth going
"""
parser.Parse(xml_data, True)
ผลลัพธ์
Start: parent, Attrs: {'student_rollno': '15'}
Data: '\n '
Start: child1, Attrs: {'Student_name': 'Krishna'}
Data: 'Strive for progress, not perfection'
End: child1
Data: '\n '
Start: child2, Attrs: {'student_name': 'vamsi'}
Data: 'There are no shortcuts to any place worth going'
End: child2
Data: '\n'
End: parent
เมื่อไหร่ควรใช้ Expat
- XML ใหญ่มาก (streaming, ไม่โหลดทั้งไฟล์เข้า RAM)
- ต้องการความเร็วสูงสุด
- ต้องการควบคุมการ parse เอง (event-driven)
ทางเลือกอื่น
xml.etree.ElementTree: DOM-style, ใช้ง่ายกว่า เหมาะ XML ขนาดปานกลางlxml: เร็ว รองรับ XPath, XSLT
สรุป
Expat เหมาะสำหรับ high-performance XML parsing แบบ streaming