2010-06-03 22 views
8

मुझे बताएं कृपया पार्सिंग की प्रक्रिया को तोड़ना संभव है? अर्थात। इस लूप से बाहर निकलें दस्तावेज़ और अंत घटना "endDocument" के अंत तक नहीं पहुंच रहा है?जावा। सैक्स पार्सर मैन्युअल रूप से पार्सिंग कैसे तोड़ें?

+0

इस प्रश्न के समान ही http://stackoverflow.com/questions/1345293/how-to-stop-parsing-xml-document-with-sax-at-any-time – Brian

उत्तर

11

हैंडलर में एक अपवाद फेंक और कोड ब्लॉक में इसे पकड़ जहां पार्स शुरू कर दिया:

try { 
    ... 
    xmlReader.parse(); 
} catch (SAXException e) { 
    if (e.Cause instanceof BreakParsingException) { 
     // we have broken the parsing process 
     .... 
    } 
} 

और अपने DocumentHandler में:

public void startElement(String namespaceURI, 
        String localName, 
        String qName, 
        Attributes atts) 
       throws SAXException { 
    // ... 
    throw new SAXException(new BreakParsingException()); 
} 
+5

बीटीडब्लू: 2 साल बाद मैं शुरू कर रहा हूं लगता है कि यह बहुत दुर्भाग्यपूर्ण है कि हमें प्रवाह को नियंत्रित करने के लिए अपवाद का उपयोग करना होगा। पार्स प्रक्रिया को तोड़ना गैर-त्रुटि परिदृश्यों में पूरी तरह से मान्य हो सकता है ... यदि कभी भी कोई बेहतर समाधान पाता है तो मुझे इसे पढ़ने में खुशी होगी! – chiccodoro

+1

[SAXParseException] (http://www.saxproject.org/apidoc/org/xml/sax/SAXParseException.html) के उप-वर्ग को फेंक दें और आपको [ErrorHandler] (http: // www में कॉलबैक मिलेगा। saxproject.org/apidoc/org/xml/sax/ErrorHandler.html)। –

2

आप एक SAXException फेंक करने के लिए है। इसे नियमित त्रुटियों से दूर करने के लिए मैं इसे अपने स्वयं के अपवाद वर्ग

4

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

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