SAX पार्सर का उपयोग कर XML फ़ाइल पार्स करना



जावा एक XML फ़ाइल को पार्स करने के कई तरीके प्रदान करता है जैसे DOM पार्सर, SAX पार्सर या Stax पार्सर का उपयोग करके XML फ़ाइल को पार्स करना।

किसी XML फ़ाइल को पार्स करने के लिए जावा कई तरीके प्रदान करता है। उदाहरण के लिए, DOM पार्सर, SAX पार्सर या Stax पार्सर का उपयोग करके XML फ़ाइल पार्स करना। इस पोस्ट में हम देखेंगे कि SAX पार्सर का उपयोग करके XML फ़ाइल को पार्स कैसे किया जाता है





SAX पार्सर का उपयोग करके XML फ़ाइलों को पार्स करने के तरीके के बारे में विवरण में जाने से पहले, आइए देखें कि विभिन्न पार्सर के माध्यम से पार्स करने और दूसरे को चुनने के लिए क्या अंतर है।

SAX पार्सर - SAX XML के लिए सिम्पल एपीआई के लिए एक परिचित करा रहा है। SAX Parser XML फ़ाइल लाइन को लाइन से पार्स करता है और घटनाओं को ट्रिगर करता है जब यह XML फ़ाइल में टैग, क्लोजिंग टैग या कैरेक्टर डेटा का सामना करता है। यही कारण है कि एसएएक्स पार्सर को एक इवेंट-आधारित पार्सर कहा जाता है



डोम पार्सर - DOM एक डॉक्यूमेंट ऑब्जेक्ट मॉडल के लिए एक संक्षिप्त नाम है। SAX पार्सर के विपरीत DOM पार्सर संपूर्ण XML फ़ाइल को मेमोरी में लोड करता है और एक ट्री स्ट्रक्चर बनाता है जहां ट्री में प्रत्येक नोड XML फ़ाइल के एक घटक का प्रतिनिधित्व करता है। DOM पार्सर से आप नोड्स बना सकते हैं, नोड्स हटा सकते हैं, उनकी सामग्री को बदल सकते हैं और नोड पदानुक्रम को पार कर सकते हैं। DOM XML फ़ाइलों के साथ काम करते समय अधिकतम लचीलापन प्रदान करता है लेकिन यह बड़ी XML फ़ाइलों के मामले में संभावित बड़ी मेमोरी फुटप्रिंट और महत्वपूर्ण प्रोसेसर आवश्यकताओं की लागत के साथ आता है।

Stax Parser - Stax XML के लिए स्ट्रीमिंग एपीआई के लिए एक परिचित करा रहा है। जब आपके एप्लिकेशन में मेमोरी सीमाएँ हों तो स्ट्रीम-आधारित पार्सर बहुत उपयोगी होते हैं। उदाहरण के लिए, जावा माइक्रो एडिशन चलाने वाला सेलफोन। इसी तरह, यदि आपके एप्लिकेशन को एक साथ कई अनुरोधों को संसाधित करने की आवश्यकता है, उदाहरण के लिए एक एप्लिकेशन सर्वर, StAX पार्सर का उपयोग किया जाना चाहिए।

स्ट्रीम-आधारित पार्सिंग को आगे वर्गीकृत किया जा सकता है:

पुलिंग पारसिंग - पार्सिंग को खींचने में, क्लाइंट एप्लिकेशन XML पार्सिंग लाइब्रेरी पर तरीकों के लिए कॉल करता है, जब उसे XML infoset के साथ सहभागिता करने की आवश्यकता होती है। दूसरे शब्दों में, क्लाइंट को केवल एक्सएमएल डेटा मिलता है जब वह स्पष्ट रूप से इसके लिए पूछता है।



पार्सिंग पुश करें - पुश पार्सिंग में, यह XML पार्सर होता है जो क्लाइंट को XML डेटा पुश करता है, जब यह XML इन्फोसिट में तत्वों का सामना करता है। दूसरे शब्दों में, पार्सर एप्लिकेशन को इसके उपयोग के लिए तैयार होने के बावजूद डेटा भेजता है या नहीं।

SAX, DOM और StAX पार्सर के बीच तुलना:

नीचे दी गई तालिका में SAX, DOM और StAX पार्सर की विशेषताओं का सारांश दिया गया है

Java_bloge_2

अब जब हम विभिन्न पार्सर्स के बारे में जानते हैं, तो आइए देखें कि कैसे एसएएक्स पार्सर का उपयोग करके एक्सएमएल फाइल को पार्स किया जाए

XML फ़ाइल
नीचे XML फ़ाइल है जिसे हम जावा ऑब्जेक्ट्स को पार्स और बिल्ड करने जा रहे हैं

द बॉर्न आइडेंटिटी डग लिमन 119 मैट डेमन, फ्रैंका पोटेंटे 2002 द बॉर्न सुप्रीमेसी पॉल ग्रीनग्रास 108 मैट डेमन, फ्रैंका पोटेंटे, जोन एलेन 2004 द बॉर्न अल्टीमेटम पॉल ग्रीनग्रैस 115 डैमन, एडगर रामिरेज, जोन एलेन 2007 द बोर्न लिगेसी टोनी गिलरॉय 135 जेरेमी रेनर , राहेल वीज़, एडवर्ड नॉर्टन 2012

प्रोजेक्ट संरचना
यहां ग्रहण आईडीई में परियोजना संरचना का स्क्रीन शॉट है

यहाँ डीवीडी क्लास है जो मूवी ऑब्जेक्ट्स की एक सूची रखता है

पैकेज co.edureka.parsers.sax आयात java.util.List पब्लिक क्लास डीवीडी {निजी स्ट्रिंग नाम निजी सूची फिल्में सार्वजनिक स्ट्रिंग getName () {रिटर्न नाम} सार्वजनिक शून्य सेटनाम (स्ट्रिंग नाम) {यह .नाम = नाम} सार्वजनिक सूची getMovies () {मूवीज} सार्वजनिक शून्य सेटमोविज (सूची फिल्में) {यह। मूवीज = फिल्में}}

मूवी ऑब्जेक्ट में फिल्म के नाम, निर्देशकों, रनटाइम (अवधि), रिलीज़ किए गए वर्ष और फिल्म के कलाकार जैसे गुण हैं

पैकेज co.edureka.parsers.sax पब्लिक क्लास मूवी {निजी स्ट्रिंग नाम निजी स्ट्रिंग निर्देशकों निजी इंट रनटाइम निजी int जारी निजी स्ट्रिंग डाली सार्वजनिक स्ट्रिंग getName () {वापसी नाम} सार्वजनिक शून्य सेटनाम (स्ट्रिंग नाम) {this.name = नाम} सार्वजनिक स्ट्रिंग getDirectors () {रिटर्न डायरेक्टर्स} public void setDirectors (स्ट्रिंग निर्देशक) {this.directors = directors} सार्वजनिक int getRuntime () {रिटर्न रनटाइम} सार्वजनिक शून्य setRuntime (इंट रनटाइम) {this.runtime = runtime} सार्वजनिक int getReleased () ) {वापसी जारी} सार्वजनिक शून्य सेटरेल्ड (int जारी) {यह.रिलीज़ = जारी} सार्वजनिक स्ट्रिंग getCast () {रिटर्न कास्ट} सार्वजनिक शून्य सेटकास्ट (स्ट्रिंग डाली) {this.cast = कलाकारों} @Orride सार्वजनिक स्ट्रिंग toString () { वापसी 'मूवी [नाम =' + नाम + ', निर्देशक =' + निर्देशक + ', रनटाइम =' + रनटाइम + ', रिलीज़ =' + जारी + ', कास्ट =' + कास्ट + ']'}}

SAX हैंडलर लागू करना:

जावा इंट में डबल हो गया

हम org.xml.sax.helpers का विस्तार करने जा रहे हैं। DefaultHandler वर्ग जो कई कॉलबैक विधियाँ प्रदान करता है और निम्नलिखित विधियों को ओवरराइड करेगा:

शुरुआत () - टैग शुरू होने पर इस विधि को कॉल किया जाता है

एंडइमेंट () - किसी टैग के अंत का सामना करने पर यह विधि कहलाती है

पात्र() - कुछ पाठ डेटा का सामना करने पर यह विधि कहलाती है

नोट: कई अन्य कॉलबैक विधियाँ हैं जैसे कि startDocument (), endDocument () इत्यादि जो आवश्यकता पड़ने पर ओवरराइड हो सकती हैं।

पैकेज co.edureka.parsers.sax इंपोर्ट java.util.ArrayList इंपोर्ट java.util.List इंपोर्ट org.xml.sax.Attributes इंपोर्ट org.xml.sax.helpers.efaultHandler पब्लिक क्लास SAXHandler पब्लिक डिफेंडरहैंडलर {DVD DVD = new DVD] को बढ़ाता है। ) ListmovieList = नया ArrayList () मूवी मूवी = रिक्त स्ट्रिंग सामग्री = अशक्त सार्वजनिक शून्य प्रारंभ (स्ट्रिंग नामस्थान), स्ट्रिंग नामकरण, स्ट्रिंग नाम, गुण विशेषताएँ 'if (qname.equals ('डीवीडी')) {स्ट्रिंग DVDName = विशेषताएँ ।getValue ('नाम') DVD.setName (DVDName)} और अगर (qname.equals ('मूवी')) {मूवी = नई मूवी ()}} सार्वजनिक शून्य समाप्ति (स्ट्रिंग नामस्थान), स्थानीय नाम, स्ट्रिंग qname) {स्विच (qname) ) {केस 'मूवी': movieList.add (मूवी) ब्रेक केस 'नाम': movie.setName (कंटेंट) ब्रेक केस 'डायरेक्टर्स': movie.setDirectors (कंटेंट) ब्रेक केस 'जारी': movie.setRedeased (Integer.parseInt) (कंटेंट)) ब्रेक केस 'रनटाइम': movie.setRuntime (Integer.parseInt (कंटेंट)) ब्रेक केस 'कास्ट': movie.setCast (कंटेंट) ब्रेक केस 'डीवीडी': DVD.setMovies (मूवीलिस्ट) ब्रेक}} public void चरा cters (char [] ch, int start, int length) {सामग्री = नई स्ट्रिंग (ch, start, length)} सार्वजनिक डीवीडी getDVD () {वापसी डीवीडी}}

SAX हैंडलर का परीक्षण
अब हमारे SAXHandler का परीक्षण करें। नीचे परीक्षण वर्ग SAXTest है जहां हम पहली बार SAXParserFactory से SAXParser का एक उदाहरण प्राप्त करते हैं और उस पार्स विधि को कॉल करते हैं जिसमें दो तर्क होते हैं: एक फ़ाइल और एक हैंडलर उदाहरण।

पैकेज co.edureka.parsers.sax आयात java.io.IOException आयात java.nio.file.Path आयात java.nio.file.Paths आयात java.util.ist आयात javax.xml.parsers.ParserConfigurationException आयात javax.xml.pml आयात करता है। .SAXParser आयात javax.xml.parsers.SAXParserFactory आयात org.xml.sax.SaxException सार्वजनिक वर्ग SAXTest {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args फेंकता है ParserConfigurationException, SAXException, IOException {SAXParserFerrserFervserFarserFarserFarserFarserFestars.blogspotWarserFestarsFreserFair.net)। parserFactor.newSAXParser () SAXHandler हैंडलर = नया SAXHandler () पथ पथ = Paths.get ('src / Resources', 'movies.xml') parser.parse (path.toFile) (, हैंडलर) DVD DVD = handler.getDVD () ) फिल्मों की सूची = DVD.getMovies () System.out.println ('डीवीडी नाम:' + DVD.getName ()) के लिए (मूवी फिल्म: फिल्में) {System.out.println (मूवी)}}}

SAXTest क्लास को अंजाम देने पर आपको नीचे आउटपुट मिलेगा:

ध्यान दें : यदि आप मूवी.xml से विभिन्न संरचनाओं के साथ एक XML फ़ाइल को पार्स करने की कोशिश कर रहे हैं, तो तरीकों में कोड startElement () और endElement () को बदलना होगा।

यदि आप कोड को आज़माने के इच्छुक हैं तो कोड डाउनलोड करें
[buttonleads form_title = 'डाउनलोड कोड' redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = 'डाउनलोड कोड']

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया टिप्पणी अनुभाग में इसका उल्लेख करें और हम आपके पास वापस आ जाएंगे।

संबंधित पोस्ट: