2013-04-09 5 views
21

धक्का पार्स दृष्टिकोण के अंतर्गत, एक धक्का पार्सर के रूप में एक दस्तावेज पार्स किया गया है तुल्यकालिक घटनाओं उत्पन्न करता है, और इन घटनाओं एक कॉलबैक हैंडलर मॉडलपार्सिंग के लिए 'पुश दृष्टिकोण' और 'पुल दृष्टिकोण' क्या है?

का उपयोग कर इस में दिए गए पाठ है एक आवेदन द्वारा कार्रवाई की जा सकती है SAX 2.0 के बारे में जावा के साथ प्रो एक्सएमएल विकास।

StAX का सवाल है, पुस्तक का कहना है:

पुल दृष्टिकोण के अंतर्गत, घटनाओं आवेदन पार्सर का उपयोग कर के नियंत्रण में एक XML दस्तावेज से खींच रहे हैं।

मैं पूछना चाहता हूं, हाइलाइट किए गए टेक्स्ट का अर्थ क्या है? अभी शुरुआत उचित एक जवाब की सराहना की :)

उत्तर

28

असल में, एक धक्का तब होता है जब पार्सर कुछ हैंडलर से कहता है, "मेरे पास एक फू है, इसके साथ कुछ करें।" एक पुल तब होता है जब हैंडलर पार्सर से कहता है, "मुझे अगला फू दें।"

पुश:

if (myChar == '(') 
    handler.handleOpenParen(); // push the open paren to the handler 

पुल:

Token token = parser.next(); // pull the next token from the parser 
+1

एक शुरुआती उत्तर के लिए बहुत आसान जवाब है। धन्यवाद। – Keerthivasan

7

पुश Parsers - घटनाक्रम startDocument(), endDocument() की तरह कॉलबैक कार्यों के रूप में एपीआई द्वारा उत्पन्न और प्रोग्रामर के नियंत्रण से बाहर हैं कर रहे हैं। हम एक प्रोग्रामर के रूप में घटनाओं को संभाल सकते हैं लेकिन घटनाओं की पीढ़ी नियंत्रण से परे है।

पार्सर्स को खींचें - जब हम कुछ एपीआई कॉल करते हैं तो ईवेंट उत्पन्न होते हैं। उदाहरण नीचे दिखाया गया है। इसलिए हम प्रोग्रामर के रूप में घटनाओं को उत्पन्न करने का निर्णय ले सकते हैं।

int eventType = xmlr.getEventType(); 
while(xmlr.hasNext()){ 
    eventType = xmlr.next(); 
    //Get all "Book" elements as XMLEvent object 
    if(eventType == XMLStreamConstants.START_ELEMENT && 
     xmlr.getLocalName().equals("Book")){ 
     //get immutable XMLEvent 
     StartElement event = getXMLEvent(xmlr).asStartElement(); 
     System.out.println("EVENT: " + event.toString()); 
    } 
} 

, क्लाइंट केवल स्पष्ट रूप से इसके लिए पूछे जाने पर एक्सएमएल डेटा प्राप्त करता है (खींचता है)।

पुल पार्सिंग के साथ, क्लाइंट एप्लिकेशन थ्रेड को नियंत्रित करता है, और आवश्यकता होने पर पार्सर पर विधियों को कॉल कर सकता है। इसके विपरीत, पुश प्रोसेसिंग के साथ, पार्सर एप्लिकेशन थ्रेड को नियंत्रित करता है, और क्लाइंट केवल पार्सर से आमंत्रण स्वीकार कर सकता है।

+1

अगर मैं सही ढंग से समझ, पुश में सभी डेटा प्रोग्रामर के नियंत्रण के बिना स्मृति में ले जाया जाएगा। खींचने में, प्रोग्रामर को नियंत्रित करना पड़ता है कि क्या लोड करना है और क्या लोड नहीं करना है। * सही? * –

+1

हाँ ..आपकी समझ सही है। – JRR

1

पुश पार्सिंग: यह वह जगह है जहां पार्सर एप्लिकेशन को पार्सिंग ईवेंट को धक्का देता है, संभवतः कॉलबैक विधियों का उपयोग करना। एप्लिकेशन किसी भी पार्सर विधियों को कॉल करने के बाद असीमित रूप से संसाधित कर सकता है, ताकि अगर पार्सर समय एप लेता है तो उस बिंदु पर अटक नहीं जाता है। जैसे ही पार्सिंग पूर्ण हो जाती है, इसके कॉलबैक ईवेंट के माध्यम से ऐप ट्रिगर होगा ताकि ऐप पार्सिंग परिणाम के साथ आगे बढ़ सके।

खींचने पार्सिंग: जब ऐप पार्सिंग घटनाओं की प्रतीक्षा करने के बजाय डेटा खींचता है। ऐप इसकी आवश्यकताओं के अनुसार डेटा को एक-एक तरीके से खींच सकता है। एसएक्सएक्स की तरह, ऐप एक्सएमएल में अगला निर्माण पाने के लिए अगली() विधि को स्वचालित रूप से कॉल करता है।

संबंधित मुद्दे