Hướng dẫn why is xml used in python? - tại sao xml được sử dụng trong python?
XML là ngôn ngữ nguồn mở di động, cho phép các lập trình viên phát triển các ứng dụng có thể được đọc bởi các ứng dụng khác, bất kể hệ điều hành và/hoặc ngôn ngữ phát triển. Show
XML là gì?Ngôn ngữ đánh dấu có thể mở rộng (XML) là một ngôn ngữ đánh dấu giống như HTML hoặc SGML. Điều này được đề xuất bởi World Wide Web Consortium và có sẵn như một tiêu chuẩn mở. XML cực kỳ hữu ích để theo dõi lượng dữ liệu nhỏ đến trung bình mà không yêu cầu xương sống dựa trên SQL. Kiến trúc phân tích cú pháp XML và APIThư viện tiêu chuẩn Python cung cấp một bộ giao diện tối thiểu nhưng hữu ích để hoạt động với XML. Hai API cơ bản và được sử dụng rộng nhất cho dữ liệu XML là các giao diện Sax và DOM.
Sax rõ ràng không thể xử lý thông tin nhanh như DOM có thể khi làm việc với các tệp lớn. Mặt khác, sử dụng DOM độc quyền có thể thực sự tiêu diệt tài nguyên của bạn, đặc biệt là nếu được sử dụng trên rất nhiều tệp nhỏ. SAX chỉ đọc, trong khi DOM cho phép các thay đổi đối với tệp XML. Vì hai API khác nhau này bổ sung cho nhau theo nghĩa đen, không có lý do gì bạn không thể sử dụng cả hai cho các dự án lớn. Đối với tất cả các ví dụ về mã XML của chúng tôi, hãy sử dụng một bộ phim XML đơn giản.xml làm đầu vào -
Phân tích cú pháp XML với API SaxSAX là một giao diện tiêu chuẩn cho phân tích cú pháp XML theo hướng sự kiện. Phân tích XML với Sax thường yêu cầu bạn tạo ContentHandler của riêng mình bằng cách phân lớp XML.SAX.Contenthandler. ContentHandler của bạn xử lý các thẻ và thuộc tính cụ thể của (các) hương vị của bạn của XML. Một đối tượng ContentHandler cung cấp các phương pháp để xử lý các sự kiện phân tích cú pháp khác nhau. Trình phân tích cú pháp sở hữu của nó gọi các phương thức ContentHandler khi nó phân tích tệp XML. Các phương thức StartDocument và EndDocument được gọi là bắt đầu và kết thúc của tệp XML. Các ký tự phương thức (văn bản) được truyền dữ liệu ký tự của tệp XML thông qua văn bản tham số. ContentHandler được gọi vào đầu và kết thúc của mỗi yếu tố. Nếu trình phân tích cú pháp không ở chế độ không gian tên, các phương thức bắt đầu (thẻ, thuộc tính) và endelement (TAG) được gọi; Mặt khác, các phương thức tương ứng bắt đầu và endelementns được gọi. Ở đây, thẻ là thẻ phần tử và các thuộc tính là một đối tượng thuộc tính. Dưới đây là những phương pháp quan trọng khác để hiểu trước khi tiến hành - Phương pháp make_parserPhương thức sau tạo một đối tượng phân tích cú pháp mới và trả về nó. Đối tượng phân tích cú pháp được tạo sẽ thuộc loại trình phân tích cú pháp đầu tiên mà hệ thống tìm thấy. xml.sax.make_parser( [parser_list] ) Dưới đây là chi tiết của các tham số -
Phương pháp phân tích cú phápPhương thức sau tạo một trình phân tích cú pháp sax và sử dụng nó để phân tích tài liệu. xml.sax.parse( xmlfile, contenthandler[, errorhandler]) Dưới đây là chi tiết của các tham số -
xml.sax.parse( xmlfile, contenthandler[, errorhandler])XMLFILE - Đây là tên của tệp XML để đọc từ.XML string. xml.sax.parseString(xmlstring, contenthandler[, errorhandler]) Dưới đây là chi tiết của các tham số -
xml.sax.parse( xmlfile, contenthandler[, 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") XMLFILE - Đây là tên của tệp XML để đọc từ. *****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 ContentHandler - Đây phải là một đối tượng ContentHandler. ErrorHandler - Nếu được chỉ định, ErrorHandler phải là đối tượng Sax ErrorHandler.Phương pháp Parsestring Có thêm một phương thức để tạo trình phân tích cú pháp sax và phân tích chuỗi XML được chỉ định. XMLString - Đây là tên của chuỗi XML để đọc từ. Thí dụ #!/usr/bin/python from xml.dom.minidom import parse import xml.dom.minidom # Open XML document using minidom parser DOMTree = xml.dom.minidom.parse("movies.xml") collection = DOMTree.documentElement if collection.hasAttribute("shelf"): print "Root element : %s" % collection.getAttribute("shelf") # Get all the movies in the collection movies = collection.getElementsByTagName("movie") # Print detail of each 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 Điều này sẽ tạo ra kết quả sau - 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 Để biết chi tiết đầy đủ trên tài liệu API DOM, vui lòng tham khảo API Python DOM tiêu chuẩn. |