SAX (Simple API for XML) เป็นอินเทอร์เฟซมาตรฐานสำหรับการแยกวิเคราะห์ XML แบบ event-driven การ parse XML ด้วย SAX ต้องสร้าง ContentHandler ของตัวเองโดยการสืบทอดจาก xml.sax.ContentHandler
ContentHandler จัดการกับแท็กและแอตทริบิวต์เฉพาะของ XML รูปแบบของคุณ อ็อบเจ็กต์ ContentHandler มีเมธอดสำหรับจัดการเหตุการณ์การ parse ต่างๆ Parser จะเรียกเมธอด ContentHandler ขณะที่กำลัง parse ไฟล์ XML
เมธอดสำคัญ
startDocumentและendDocument- เรียกที่เริ่มต้นและสิ้นสุดของไฟล์ XMLcharacters(text)- ส่งข้อมูลตัวอักษรของ XML ผ่านพารามิเตอร์ textstartElement(tag, attributes)และendElement(tag)- เรียกที่เริ่มต้นและสิ้นสุดของแต่ละ element
The make_parser Method
xml.sax.make_parser([parser_list])
สร้าง parser object ใหม่และคืนค่ากลับ parser_list เป็นรายการ parser ที่จะใช้ (optional)
The parse Method
xml.sax.parse(xmlfile, contenthandler[, errorhandler])
สร้าง SAX parser และใช้ parse เอกสาร xmlfile: ชื่อไฟล์ XML, contenthandler: ContentHandler object, errorhandler: SAX ErrorHandler object (optional)
The parseString Method
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
สร้าง SAX parser และ parse XML string ที่ระบุ
ตัวอย่างโค้ด
#!/usr/bin/python
import xml.sax
class MovieHandler(xml.sax.ContentHandler):
def __init__(self):
self.CurrentData = ""
self.type = ""
self.format = ""
self.year = ""
self.rating = ""
self.stars = ""
self.description = ""
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "movie":
print "*****Movie*****"
title = attributes["title"]
print "Title:", title
def endElement(self, tag):
if self.CurrentData == "type":
print "Type:", self.type
elif self.CurrentData == "format":
print "Format:", self.format
elif self.CurrentData == "year":
print "Year:", self.year
elif self.CurrentData == "rating":
print "Rating:", self.rating
elif self.CurrentData == "stars":
print "Stars:", self.stars
elif self.CurrentData == "description":
print "Description:", self.description
self.CurrentData = ""
def characters(self, content):
if self.CurrentData == "type":
self.type = content
elif self.CurrentData == "format":
self.format = content
elif self.CurrentData == "year":
self.year = content
elif self.CurrentData == "rating":
self.rating = content
elif self.CurrentData == "stars":
self.stars = content
elif self.CurrentData == "description":
self.description = content
if (__name__ == "__main__"):
parser = xml.sax.make_parser()
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
Handler = MovieHandler()
parser.setContentHandler(Handler)
parser.parse("movies.xml")
ผลลัพธ์ตัวอย่าง
*****Movie***** Title: Enemy Behind Type: War, Thriller Format: DVD Year: 2003 Rating: PG Stars: 10 Description: Talk about a US-Japan war *****Movie***** Title: Transformers Type: Anime, Science Fiction Format: DVD Year: 1989 Rating: R Stars: 8 Description: A schientific fiction *****Movie***** Title: Trigun Type: Anime, Action Format: DVD Rating: PG Stars: 10 Description: Vash the Stampede! *****Movie***** Title: Ishtar Type: Comedy Format: VHS Rating: PG Stars: 2 Description: Viewable boredom
สำหรับรายละเอียด SAX API เต็มรูปแบบ โปรดอ้างอิงเอกสาร Python SAX APIs มาตรฐาน