SAX เป็นอินเทอร์เฟซมาตรฐานสำหรับการแยกวิเคราะห์ XML ที่ขับเคลื่อนด้วยเหตุการณ์ โดยทั่วไปการแยกวิเคราะห์ XML ด้วย SAX คุณจะต้องสร้าง ContentHandler ของคุณเองโดยจัดคลาสย่อย xml.sax.ContentHandler
ContentHandler ของคุณจัดการแท็กและคุณลักษณะเฉพาะของรสชาติ XML ของคุณ ออบเจ็กต์ ContentHandler จัดเตรียมวิธีในการจัดการเหตุการณ์การแยกวิเคราะห์ต่างๆ parser ที่เป็นเจ้าของเรียกเมธอด ContentHandler ขณะที่แยกวิเคราะห์ไฟล์ XML
เมธอด startDocument และ endDocument ถูกเรียกที่จุดเริ่มต้นและจุดสิ้นสุดของไฟล์ XML อักขระวิธี (ข้อความ) ถูกส่งผ่านข้อมูลอักขระของไฟล์ XML ผ่านข้อความพารามิเตอร์
ContentHandler ถูกเรียกที่จุดเริ่มต้นและจุดสิ้นสุดของแต่ละองค์ประกอบ ถ้า parser ไม่ได้อยู่ในโหมดเนมสเปซ เมธอด startElement(tag, attributes) และ endElement(tag) จะถูกเรียก มิฉะนั้น จะเรียกเมธอดที่เกี่ยวข้อง startElementNS และ endElementNS ในที่นี้ tag คือแท็กองค์ประกอบ และแอตทริบิวต์เป็นออบเจ็กต์แอตทริบิวต์
ต่อไปนี้เป็นวิธีสำคัญอื่นๆ ที่ควรทำความเข้าใจก่อนดำเนินการ -
วิธี make_parser
เมธอดต่อไปนี้สร้างอ็อบเจ็กต์ parser ใหม่และส่งคืน ออบเจ็กต์ parser ที่สร้างขึ้นจะเป็นประเภท parser แรกที่ระบบพบ
xml.sax.make_parser( [parser_list] )
นี่คือรายละเอียดของพารามิเตอร์ -
- parser_list − อาร์กิวเมนต์ที่เป็นทางเลือกที่ประกอบด้วยรายการของ parsers ที่จะใช้ ซึ่งทั้งหมดต้องใช้เมธอด make_parser
วิธีแยกวิเคราะห์
เมธอดต่อไปนี้จะสร้างตัวแยกวิเคราะห์ SAX และใช้เพื่อแยกวิเคราะห์เอกสาร
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
นี่คือรายละเอียดของพารามิเตอร์ -
- xmlfile − นี่คือชื่อของไฟล์ XML ที่จะอ่านได้
- ตัวจัดการเนื้อหา − นี่ต้องเป็นอ็อบเจ็กต์ ContentHandler
- ตัวจัดการข้อผิดพลาด − หากระบุไว้ ตัวจัดการข้อผิดพลาดต้องเป็นอ็อบเจ็กต์ SAX ErrorHandler
วิธี parseString
มีอีกวิธีหนึ่งในการสร้างตัวแยกวิเคราะห์ SAX และแยกวิเคราะห์ สตริง XML . ที่ระบุ .
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
นี่คือรายละเอียดของพารามิเตอร์ -
- xmlstring − นี่คือชื่อของสตริง XML ที่จะอ่าน
- ตัวจัดการเนื้อหา − นี่ต้องเป็นอ็อบเจ็กต์ ContentHandler
- ตัวจัดการข้อผิดพลาด − หากระบุไว้ ตัวจัดการข้อผิดพลาดต้องเป็นอ็อบเจ็กต์ SAX ErrorHandler
ตัวอย่าง
#!/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 = "" # Call when an element starts def startElement(self, tag, attributes): self.CurrentData = tag if tag == "movie": print "*****Movie*****" title = attributes["title"] print "Title:", title # Call when an elements ends 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 = "" # Call when a character is read 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__"): # create an XMLReader parser = xml.sax.make_parser() # turn off namepsaces parser.setFeature(xml.sax.handler.feature_namespaces, 0) # override the default ContextHandler 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 API มาตรฐาน