2012-05-14 11 views
7

उनमें से दोनों का एक ही उद्देश्य प्रतीत होता है (एक XMLReader बनाएँ)। कुछ ट्यूटोरियल में एक है, कुछ अन्य।अंतर SAXParserFactory XMLReaderFactory। कौन सा चयन करना है?

SAXParserFactory:

उदाहरण कोड:

// SAXParserFactory 
SAXParserFactory factory = SAXParserFactory.newInstance(); 
SAXParser parser = factory.newSAXParser(); 
XMLReader reader = parser.getXMLReader(); 
reader.parse(new InputSource("document.xml")); 

XMLReaderFactory:

उदाहरण कोड:

// XMLReaderFactory 
XMLReader xmlReader = XMLReaderFactory.createXMLReader(); 
xmlReader.parse(new InputSource("document.xml")); 

प्रश्न:

इन मुख्य अंतर हैं या वहाँ कुछ मैं देखरेख कर ली है।

आपको कौन सा चयन करना चाहिए?

+0

SAXParserFactory JAXP है, जबकि XMLReaderFactory "आधिकारिक" SAX API है। मुझे O'Reilly की पुरानी SAX2 पुस्तक को आधिकारिक एपीआई की सिफारिश करने की याद आती है, जिस तरह से इसे नामस्थानों को संभाला जाता है। मुझे नहीं पता कि यह अब प्रासंगिक है या नहीं। लेकिन, मुझे लगता है कि मैं XMLReaderFactory का उपयोग तब तक करूंगा जब तक मुझे किसी कारण से JAXP की आवश्यकता न हो। शायद कोई और कुछ और वर्तमान इनपुट प्रदान कर सकता है। –

उत्तर

4

मुख्य JAXP APIsjavax.xml.parsers पैकेज में परिभाषित कर रहे हैं। उस पैकेज में SAXParserFactory जैसे विक्रेता-तटस्थ कारखाने वर्ग शामिल हैं जो आपको एक एस AXParser देते हैं।

SAXParserFactory एक कारखाने एपीआई कि अनुप्रयोगों कॉन्फ़िगर और एक SAX आधारित पार्सर प्राप्त XML दस्तावेज़ों को पार्स करने के लिए सक्षम बनाता है परिभाषित करता है।

  • SAXParser एपीआई कि एक XMLReader कार्यान्वयन वर्ग लपेटता परिभाषित करता है।

  • पैकेज org.xml.sax बुनियादी SAX एपीआई परिभाषित करता है।

  • जावा रनटाइम एक डिफ़ॉल्ट कार्यान्वयन XMLReader

SAXParserFactory छुपाता है जो (SAX1) का ब्यौरा ParserFactory/(Sax2) XMLReaderFactory, ... आप से साथ आता है।

आप एक अलग JAXP पार्सर द्वारा चूक JAXP पार्सर को बदलने के लिए सक्षम होने के लिए चाहते हैं कार्यान्वयन आप विक्रेता तटस्थ SAXParserFactory का उपयोग करना चाहिए (वहाँ डिफ़ॉल्ट कार्यान्वयन में एक ज्ञात incomapatibilty/बग हो सकता है)।

यदि आप जानते हैं कि आपका आवेदन हमेशा SAX2XMLReader का उपयोग करेगा, तो आप XMLReaderFactory का उपयोग कर सकते हैं।

2

एलियोट रस्टी हेरोल्ड, जो जावा में XML प्रोसेसिंग पर एक किताब लिखी है, एक बार लिखा था:

SAXParserFactory [is] a hideous, evil monstrosity of a class that should 
be hung, shot, beheaded, drawn and quartered, burned at the stake, 
buried in unconsecrated ground, dug up, cremated, and the ashes tossed 
in the Tiber while the complete cast of Wicked sings "Ding dong, the 
witch is dead." --Elliotte Rusty Harold on xml-dev 

मैं वास्तव में है कि अब तक जाना नहीं होता (और अगर मैंने किया, मैं कोशिश करते हैं और यह व्याकरण होगा)। बहुत सारे जैक्सपी की तरह, यह डिजाइन का सबसे अद्भुत टुकड़ा नहीं है; लेकिन मैं इसे पार्सर इंस्टेंस प्राप्त करने का डिफ़ॉल्ट तरीका के रूप में उपयोग करता हूं, अगर केवल इसलिए कि यह JAXP के अन्य हिस्सों के अनुरूप है।

ऐतिहासिक रूप से, दोनों समानांतर में विकसित किए गए थे। जेएक्सपी ने मूल रूप से एसएक्स 1 में लापता कार्यक्षमता जोड़ने की कोशिश की, लेकिन समानांतर में, एसएएक्स 2 कुछ अंतराल के साथ आ रहा था और भर गया, इसलिए यह विशेष अंतर दो बार भर गया।

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