ইভেন্ট-চালিত 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 দেখুন৷