งูหลามวิเคราะห์ XML
XML คืออะไร?
XML หมายความ Extensible Markup Language(E X tensible M arkup L anguage) คุณสามารถเรียนรู้ผ่านทางเว็บไซต์นี้ XML สอน
XML ถูกออกแบบมาเพื่อส่งและเก็บข้อมูล
XML เป็นชุดของกฎในการกำหนดความหมายของแท็กแท็กเหล่านี้จะเอกสารแบ่งออกเป็นหลายส่วนและชิ้นส่วนเหล่านี้จะระบุ
นอกจากนี้ยังเป็นภาษาอภิมาร์กอัปที่กำหนดไวยากรณ์ของภาษาที่ใช้ในการกำหนดความหมายของภาษามาร์กอัปอื่น ๆ เฉพาะโดเมนโครงสร้าง
หลามสำหรับการแยก XML
DOM สามัญและ XML อินเตอร์เฟซการเขียนโปรแกรมแซ็กโซโฟนสองอินเตอร์เฟซที่แตกต่างกับไฟล์ XML วิธีการของหลักสูตรการใช้โอกาสที่แตกต่างกัน
มีสามวิธีคืองูหลามวิเคราะห์ XML, แซ็กโซโฟน, DOM และ ElementTree:
1.SAX (แซกซ์)
มาตรฐานห้องสมุดหลามมี parser แซ็กโซโฟนแซ็กโซโฟนที่มีรูปแบบเหตุการณ์ที่ขับเคลื่อนด้วยการเรียกโดยเหตุการณ์หนึ่งในกระบวนการของการวิเคราะห์ XML และเรียกผู้ใช้กำหนดฟังก์ชั่นการโทรกลับไปจัดการกับไฟล์ของ XML
2.DOM (Object Model เอกสาร)
ข้อมูล XML จะแยกเป็นต้นไม้ในหน่วยความจำในการดำเนินงานผ่านต้นไม้ที่จะจัดการกับ XML
3.ElementTree (ต้นไม้องค์ประกอบ)
ElementTree เป็นน้ำหนักเบา DOM ด้วย API ที่สะดวกสบายและเป็นกันเอง ความพร้อมใช้งานรหัสได้อย่างรวดเร็วและใช้หน่วยความจำน้อย
หมายเหตุ: เนื่องจาก DOM ต้อง map ข้อมูล XML เป็นต้นไม้หน่วยความจำช้าที่สองคือการบริโภคมากขึ้นของหน่วยความจำ SAX สตรีมมิ่งอ่านไฟล์ XML ได้เร็วขึ้น, ใช้หน่วยความจำน้อยลง แต่ต้องใช้เพื่อดำเนินการเรียกกลับ (จัดการ )
ใช้ส่วนนี้ไปยัง movies.xml เอกสาร XML เช่นอ่านดังนี้
<collection shelf="New Arrivals"> <movie title="Enemy Behind"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Talk about a US-Japan war</description> </movie> <movie title="Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description> </movie> <movie title="Trigun"> <type>Anime, Action</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description> </movie> <movie title="Ishtar"> <type>Comedy</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>Viewable boredom</description> </movie> </collection>
หลาม XML แยกโดยใช้แซ็กโซโฟน
แซ็กโซโฟนเป็น API เหตุการณ์ที่ขับเคลื่อนด้วย
ใช้แยก SAX เอกสาร XML เกี่ยวข้องกับสองส่วนแยกวิเคราะห์และเหตุการณ์การจัดการ
ตัวแยกวิเคราะห์เป็นผู้รับผิดชอบสำหรับการอ่านเอกสาร XML และส่งเหตุการณ์จัดการเหตุการณ์เช่นองค์ประกอบเริ่มต้นด้วยเหตุการณ์สิ้นสุดองค์ประกอบ;
ตัวจัดการเหตุการณ์เป็นผู้รับผิดชอบต่อเหตุการณ์ที่เกิดขึ้นตามการถ่ายโอนข้อมูล XML สำหรับการประมวลผล
- 1, การประมวลผลของไฟล์ที่มีขนาดใหญ่;
- 2 เพียงส่วนหนึ่งของเนื้อหาของแฟ้มหรือเพียงเพื่อให้ได้ข้อมูลที่เฉพาะเจาะจงจากแฟ้ม
- 3 ต้องการที่จะสร้างรูปแบบวัตถุของตัวเองตลอดเวลา
แซ็กโซโฟนใช้ xml.sax ลักษณะ XML ครั้งแรกในฟังก์ชั่นแยก, เช่นเดียวกับ xml.sax.handler ContentHandler ในหลาม
วิธีการเรียน ContentHandler แนะนำ
ตัวอักษร (Content) วิธีการ
ระยะเวลาของการโทร:
จากจุดเริ่มต้นของเส้นก่อนที่จะประสบฉลากมีค่าตัวเนื้อหาของสตริงเหล่านี้
จากป้ายฉลากก่อนที่จะเผชิญหน้าต่อไปการปรากฏตัวของตัวละครที่มีค่าเนื้อหาของสตริงเหล่านี้
จากฉลากก่อนที่จะเผชิญหน้ากับ Terminator สายการปรากฏตัวของตัวละครค่าเนื้อหาของสตริงเหล่านี้
แท็กอาจจะเป็นจุดเริ่มต้นของแท็กก็สามารถเป็นจุดสิ้นสุดของฉลาก
startDocument () วิธีการ
เริ่มต้นเอกสารที่เรียกว่า
endDocument () วิธีการ
เมื่อมีการโทรถึงจุดสิ้นสุดของตัวแยกวิเคราะห์เอกสาร
startElement (ชื่อ attrs) วิธีการ
เรียกแท็กเริ่มต้น XML พบชื่อเป็นชื่อของแท็ก, attrs เป็นแท็กมูลค่าทรัพย์สินพจนานุกรม
endElement (ชื่อ) วิธีการ
เรียกแท็กสิ้นสุดพบ XML
วิธี make_parser
วิธีการต่อไปนี้สร้างวัตถุ parser ใหม่และผลตอบแทน
xml.sax.make_parser( [parser_list] )
พารามิเตอร์คำอธิบาย:
- parser_list - พารามิเตอร์ตัวเลือกรายการแยกวิเคราะห์
วิธีการแยกวิเคราะห์
วิธีการต่อไปนี้สร้าง parser แซ็กโซโฟนและแยกเอกสาร XML:
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
พารามิเตอร์คำอธิบาย:
- XMLFile - ชื่อไฟล์ XML
- ContentHandler - ต้องเป็นวัตถุของ ContentHandler ที่
- ErrorHandler - ถ้าพารามิเตอร์นี้มีการระบุ ErrorHandler จะต้องเป็นวัตถุ SAX ErrorHandler
วิธี parseString
วิธี parseString สร้าง parser XML และแยกสตริง XML:
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
พารามิเตอร์คำอธิบาย:
- xmlstring - สตริง XML
- ContentHandler - ต้องเป็นวัตถุของ ContentHandler ที่
- ErrorHandler - ถ้าพารามิเตอร์นี้มีการระบุ ErrorHandler จะต้องเป็นวัตถุ SAX ErrorHandler
เช่นงูหลาม XML แยก
#!/usr/bin/python # -*- coding: UTF-8 -*- 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__"): # 创建一个 XMLReader parser = xml.sax.make_parser() # turn off namepsaces parser.setFeature(xml.sax.handler.feature_namespaces, 0) # 重写 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
เอกสาร API แซ็กโซโฟนที่สมบูรณ์โปรดดูที่ หลาม SAX APIs
ใช้ xml.dom แจง XML
Document Object Model (Document Object Model เรียกว่า DOM) มันเป็น W3C แนะนำการรักษา Extensible Markup ภาษาอินเตอร์เฟซโปรแกรมมาตรฐาน
ในการแยกวิเคราะห์ DOM ที่จะแยกเอกสาร XML อ่านเอกสารทั้งหมดในครั้งเดียวองค์ประกอบทั้งหมดของเอกสารที่บันทึกไว้ในโครงสร้างในหน่วยความจำแล้วคุณสามารถใช้ DOM เพื่อให้การทำงานที่แตกต่างในการอ่านหรือแก้ไขเอกสาร เนื้อหาและโครงสร้างที่จะแก้ไขการเขียนเนื้อหาของไฟล์ XML ที่
หลามกับ xml.dom.minidom การแยกเอกสาร XML ตัวอย่างดังต่อไปนี้:
#!/usr/bin/python # -*- coding: UTF-8 -*- from xml.dom.minidom import parse import xml.dom.minidom # 使用minidom解析器打开 XML 文档 DOMTree = xml.dom.minidom.parse("movies.xml") collection = DOMTree.documentElement if collection.hasAttribute("shelf"): print "Root element : %s" % collection.getAttribute("shelf") # 在集合中获取所有电影 movies = collection.getElementsByTagName("movie") # 打印每部电影的详细信息 for movie in movies: print "*****Movie*****" if movie.hasAttribute("title"): print "Title: %s" % movie.getAttribute("title") type = movie.getElementsByTagName('type')[0] print "Type: %s" % type.childNodes[0].data format = movie.getElementsByTagName('format')[0] print "Format: %s" % format.childNodes[0].data rating = movie.getElementsByTagName('rating')[0] print "Rating: %s" % rating.childNodes[0].data description = movie.getElementsByTagName('description')[0] print "Description: %s" % description.childNodes[0].data
ผลของวิธีการดังกล่าวข้างต้นมีดังนี้
Root element : New Arrivals *****Movie***** Title: Enemy Behind Type: War, Thriller Format: DVD Rating: PG Description: Talk about a US-Japan war *****Movie***** Title: Transformers Type: Anime, Science Fiction Format: DVD Rating: R Description: A schientific fiction *****Movie***** Title: Trigun Type: Anime, Action Format: DVD Rating: PG Description: Vash the Stampede! *****Movie***** Title: Ishtar Type: Comedy Format: VHS Rating: PG Description: Viewable boredom
เอกสาร API DOM สมบูรณ์โปรดดู งูหลาม DOM ทั้งหมด APIs