কম্পিউটার

পাইথনে SAX API-এর সাথে XML পার্স করা হচ্ছে


ইভেন্ট-চালিত XML পার্সিংয়ের জন্য SAX হল একটি আদর্শ ইন্টারফেস। SAX-এর সাথে XML পার্স করার জন্য আপনাকে সাধারণত xml.sax.ContentHandler সাবক্লাস করে আপনার নিজস্ব ContentHandler তৈরি করতে হবে।

আপনার কনটেন্টহ্যান্ডলার আপনার এক্সএমএল এর স্বাদ(গুলি) এর নির্দিষ্ট ট্যাগ এবং বৈশিষ্ট্যগুলি পরিচালনা করে। একটি ContentHandler অবজেক্ট বিভিন্ন পার্সিং ইভেন্ট পরিচালনা করার পদ্ধতি প্রদান করে। এটির মালিকানাধীন পার্সার কনটেন্টহ্যান্ডলার পদ্ধতিগুলিকে কল করে কারণ এটি XML ফাইল পার্স করে৷

XML ফাইলের শুরুতে এবং শেষে startDocument এবং endDocument পদ্ধতিগুলিকে বলা হয়। পদ্ধতি অক্ষর(টেক্সট) প্যারামিটার টেক্সটের মাধ্যমে এক্সএমএল ফাইলের অক্ষর ডেটা পাস করা হয়।

প্রতিটি উপাদানের শুরুতে এবং শেষে কন্টেন্টহ্যান্ডলারকে ডাকা হয়। যদি পার্সার নেমস্পেস মোডে না থাকে, তাহলে startElement(ট্যাগ, অ্যাট্রিবিউটস) এবং endElement(ট্যাগ) পদ্ধতিগুলিকে বলা হয়; অন্যথায়, সংশ্লিষ্ট পদ্ধতি startElementNS এবং endElementNS বলা হয়। এখানে, ট্যাগ হল এলিমেন্ট ট্যাগ, এবং অ্যাট্রিবিউটস হল অ্যাট্রিবিউট অবজেক্ট।

এখানে এগিয়ে যাওয়ার আগে বুঝতে অন্যান্য গুরুত্বপূর্ণ পদ্ধতি আছে −

মেক_পার্সার পদ্ধতি

নিম্নলিখিত পদ্ধতি একটি নতুন পার্সার অবজেক্ট তৈরি করে এবং এটি ফেরত দেয়। তৈরি করা পার্সার অবজেক্টটি হবে প্রথম পার্সার টাইপের যেটি সিস্টেম খুঁজে পায়।

xml.sax.make_parser( [parser_list] )

এখানে প্যারামিটারের বিশদ বিবরণ রয়েছে −

  • পার্সার_লিস্ট − ঐচ্ছিক যুক্তি যা ব্যবহার করার জন্য পার্সারের একটি তালিকা নিয়ে গঠিত যা অবশ্যই মেক_পার্সার পদ্ধতি প্রয়োগ করতে হবে।

পার্স পদ্ধতি

নিম্নলিখিত পদ্ধতিটি একটি SAX পার্সার তৈরি করে এবং এটি একটি নথি পার্স করতে ব্যবহার করে৷

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

এখানে প্যারামিটারের বিশদ বিবরণ রয়েছে −

  • xmlfile − এটি XML ফাইলের নাম যেটি থেকে পড়তে হবে।
  • কন্টেন্টহ্যান্ডলার − এটি অবশ্যই একটি ContentHandler অবজেক্ট হতে হবে।
  • ত্রুটির হ্যান্ডলার − নির্দিষ্ট করা থাকলে, এররহ্যান্ডলার অবশ্যই একটি SAX ErrorHandler অবজেক্ট হতে হবে।

পার্সস্ট্রিং পদ্ধতি

একটি 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 APIs দেখুন৷


  1. কিভিতে পাইথন চেকবক্স উইজেট?

  2. পাইথন - কিভিতে বোতাম অ্যাকশন

  3. পাইথনে উত্তরাধিকার

  4. পাইথনে XML পার্সিং?