(+84) 236.3827111 ex. 402

Xử lý XML trong Python (tt)


Phương thức parseString trong Python

Phương thức này cũng dùng để tạo một SAX parser và để phân tích cú pháp XML string đã cho.

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

Chi tiết về tham số:

  • xmlstring: Là tên của XML string để đọc từ đó.

  • contenthandler: Phải là một đối tượng ContentHandler.

  • errorhandler: Nếu được xác định, thì nó phải là một đối tượng SAX ErrorHandler.

Ví dụ

 

import xml.sax

class Phim BoHandler( xml.sax.ContentHandler ):
   def __init__(self):
      self.CurrentData = ""
      self.type = ""
      self.format = ""
      self.year = ""
      self.rating = ""
      self.stars = ""
      self.description = ""

   # Goi khi mot phan tu bat dau
   def startElement(self, tag, attributes):
      self.CurrentData = tag
      if tag == "movie":
         print "*****Phim Bo*****"
         title = attributes["title"]
         print "Ten Phim:", title

   # Goi khi mot phan tu ket thuc
   def endElement(self, tag):
      if self.CurrentData == "type":
         print "The loai:", self.type
      elif self.CurrentData == "format":
         print "Dinh dang:", self.format
      elif self.CurrentData == "year":
         print "Nam:", self.year
      elif self.CurrentData == "rating":
         print "Rating:", self.rating
      elif self.CurrentData == "stars":
         print "Dien vien:", self.stars
      elif self.CurrentData == "description":
         print "Gioi thieu:", self.description
      self.CurrentData = ""

   # Goi khi mot ky tu duoc doc
   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__"):
   
   # Tao mot XMLReader
   parser = xml.sax.make_parser()
   # Tat cac namepsace
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)

   # ghi de ContextHandler mac dinh
   Handler = Phim BoHandler()
   parser.setContentHandler( Handler )
   
   parser.parse("movies.xml")Phân tích cú pháp XML với DOM APIs

DOM thực sự hữu ích với các ứng dụng truy cập ngẫu nhiên. SAX chỉ cho phép bạn xem một bit của tài liệu tại một thời điểm và không có quyền truy cập khác.

Dưới đây là cách nhanh nhất để tải một XML document và để tạo một đối tượng minidom bởi sử dụng xml.dom Module. Đối tượng minidom cung cấp một phương thức parser đơn giản mà tạo một DOM tree một cách nhanh chóng từ XML file.

Hàm parse(file [,parser]) của đối tượng minidom để phân tích cú pháp XML file đã được chỉ rõ bởi file bên trong một đối tượng DOM tree.

 

from xml.dom.minidom import parse
import xml.dom.minidom

# Mo mot tai lieu XML document boi su dung minidom parser
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
   print "Root element : %s" % collection.getAttribute("shelf")

# Lay tat ca phim trong bo suu tap
movies = collection.getElementsByTagName("movie")

# in chi tiet ve moi phim.
for movie in movies:
   print "*****Phim Bo*****"
   if movie.hasAttribute("title"):
      print "Ten Phim: %s" % movie.getAttribute("title")

   type = movie.getElementsByTagName('type')[0]
   print "The loai: %s" % type.childNodes[0].data
   format = movie.getElementsByTagName('format')[0]
   print "Dinh dang: %s" % format.childNodes[0].data
   rating = movie.getElementsByTagName('rating')[0]
   print "Rating: %s" % rating.childNodes[0].data
   description = movie.getElementsByTagName('description')[0]
   print "Gioi thieu: %s" % description.childNodes[0].data