2012-05-14 13 views
7

Entrambi sembrano avere lo stesso scopo (creare un XMLReader). Alcuni tutorial contengono l'uno, l'altro.Differenza SAXParserFactory XMLReaderFactory. Quale scegliere?

SAXParserFactory:

esempio:

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

XMLReaderFactory:

esempio di codice:

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

domanda:

Sono queste le principali differenze o ci sono alcuni che ho supervisionato.

Quale scegliere?

+0

SAXParserFactory è JAXP, mentre XMLReaderFactory è l'API SAX "ufficiale". Ricordo il vecchio libro SAX2 di O'Reilly che raccomandava l'API ufficiale, a causa del modo in cui gestiva gli spazi dei nomi. Non so se questo è più rilevante. Ma suppongo che userò XMLReaderFactory a meno che non abbia bisogno di JAXP per qualche motivo. Forse qualcun altro può fornire un po 'più di input corrente. –

risposta

4

I codici JAXP APIs principali sono definiti nel pacchetto javax.xml.parsers. Questo pacchetto contiene classi di fabbrica neutrali al fornitore come lo SAXParserFactory che ti danno un S AXParser.

SAXParserFactory definisce un'API factory che consente alle applicazioni di configurare e ottenere un parser basato su SAX per analizzare i documenti XML.

  • Il SAXParser definisce l'API che avvolge una classe di implementazione XMLReader .

  • Il pacchetto org.xml.sax definisce le API SAX di base.

  • Il runtime Java è dotato di un'implementazione di default XMLReader

Il SAXParserFactory nasconde i cui dettagli (SAX1)/XMLReaderFactory (SAX2) ParserFactory, ... da voi.

Se si vuole essere in grado di sostituire il parser di default JAXP da un diverso JAXP Parser (ci può essere un noto incomapatibilty/bug nell'implementazione di default) l'attuazione si dovrebbe usare il vendor neutral SAXParserFactory.

Se si sa che l'applicazione utilizzerà sempre un SAX2XMLReader è possibile utilizzare lo XMLReaderFactory.

2

Elliotte Rusty Harold, che ha scritto un libro sulla elaborazione XML in Java, una volta ha scritto:

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 

non vorrei davvero andare così lontano (e se l'ho fatto, vorrei provare e renderlo grammaticale). Come un sacco di JAXP, non è il pezzo più bello del design; ma lo uso come metodo predefinito per ottenere un'istanza parser, se non altro perché è coerente con altre parti di JAXP.

Storicamente, i due sono stati sviluppati in parallelo. Inizialmente, JAXP ha provato ad aggiungere funzionalità mancanti a SAX1, ma in parallelo, SAX2 stava arrivando e riempiva alcune lacune, quindi questo particolare spazio si è riempito due volte.

Problemi correlati