কম্পিউটার টিউটোরিয়াল

পাইথনে SAX APIs দিয়ে XML পার্সিং


SAX इवेंट-ड्रिवन XML पार्सिंग के लिए एक मानक इंटरफेस है। SAX के साथ XML पार्स करने के लिए आमतौर पर आपको xml.sax.ContentHandler को सबक्लास करके अपना खुद का ContentHandler बनाना पड़ता है।

आपका ContentHandler आपके XML के विशेष टैग और एट्रिब्यूट को संभालता है। एक ContentHandler ऑब्जेक्ट विभिन्न पार्सिंग इवेंट को संभालने के लिए मेथड्स प्रदान करता है। इसका स्वामित्व वाला पार्सर XML फ़ाइल को पार्स करते समय ContentHandler मेथड्स को कॉल करता है।

startDocument और endDocument मेथड्स XML फ़ाइल की शुरुआत और अंत में कॉल किए जाते हैं। characters(text) मेथड पैरामीटर text के माध्यम से XML फ़ाइल के कैरेक्टर डेटा को पास किया जाता है।

ContentHandler को प्रत्येक तत्व की शुरुआत और अंत में कॉल किया जाता है। यदि पार्सर नेमस्पेस मोड में नहीं है, तो startElement(tag, attributes) और endElement(tag) मेथड्स कॉल किए जाते हैं; अन्यथा, संबंधित startElementNS और endElementNS मेथड्स कॉल किए जाते हैं। यहां, tag तत्व टैग है, और attributes एक Attributes ऑब्जेक्ट है।

आगे बढ़ने से पहले समझने के लिए अन्य महत्वपूर्ण मेथड्स यहां दिए गए हैं −

make_parser मेथड

निम्नलिखित मेथड एक नया पार्सर ऑब्जेक्ट बनाता है और इसे लौटाता है। बनाया गया पार्सर ऑब्जेक्ट सिस्टम द्वारा खोजे गए पहले पार्सर प्रकार का होगा।

xml.sax.make_parser( [parser_list] )

पैरामीटर्स का विवरण −

  • parser_list − पार्सर्स की एक सूची वाला वैकल्पिक तर्क जिसका उपयोग किया जाना चाहिए जो सभी make_parser मेथड को लागू करते हैं।

parse मेथड

निम्नलिखित मेथड एक SAX पार्सर बनाता है और इसका उपयोग एक दस्तावेज़ को पार्स करने के लिए करता है।

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

पैरामीटर्स का विवरण −

  • xmlfile − यह पढ़ने के लिए XML फ़ाइल का नाम है।
  • contenthandler − यह एक ContentHandler ऑब्जेक्ट होना चाहिए।
  • errorhandler − यदि निर्दिष्ट है, तो errorhandler एक SAX ErrorHandler ऑब्जेक्ट होना चाहिए।

parseString मेथड

निर्दिष्ट XML स्ट्रिंग को पार्स करने के लिए एक SAX पार्सर बनाने की एक और विधि है।

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

पैरामीटर्स का विवरण −

  • xmlstring − यह पढ़ने के लिए XML स्ट्रिंग का नाम है।
  • contenthandler − यह एक ContentHandler ऑब्जेक्ट होना चाहिए।
  • errorhandler − यदि निर्दिष्ट है, तो errorhandler एक 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. পাইথনে Kivy-তে Checkbox উইজেট ব্যবহার

  2. পাইথন Kivy-তে বাটন একশন (Button Action) - ক্লিক ইভেন্ট হ্যান্ডলিং

  3. পাইথনে ইনহেরিটেন্স (Inheritance)

  4. পাইথনে XML পার্সিং: ElementTree API ব্যবহার করে XML পড়া, লিখা এবং মডিফাই করা