2012-05-14 6 views
7

Oba wydają się mieć ten sam cel (utworzyć XMLReader). Niektóre samouczki zawierają jeden, a drugi inny.Różnica SAXParserFactory XMLReaderFactory. Który wybrać?

SAXParserFactory:

przykładowy kod:

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

XMLReaderFactory:

przykładowy kod:

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

pytanie:

Są to główne różnice czy istnieją pewne, w jakim nadzorowane.

Którą wybrać?

+0

SAXParserFactory to JAXP, a XMLReaderFactory to "oficjalny" interfejs SAX API. Pamiętam starą książkę SAX2 od O'Reilly zalecającą oficjalne API, ze względu na sposób, w jaki obsługiwał przestrzenie nazw. Nie wiem, czy to już jest istotne. Ale, Chyba użyłbym XMLReaderFactory, chyba że z jakiegoś powodu potrzebowałem JAXP. Może ktoś inny może dostarczyć trochę więcej bieżących danych wejściowych. –

Odpowiedz

4

Główne JAXP APIs są zdefiniowane w pakiecie javax.xml.parsers. Ten pakiet zawiera neutralne dla producenta klasy fabryczne, takie jak SAXParserFactory, które dają S AXParser.

Parametr definiuje fabryczny interfejs API, który umożliwia aplikacjom konfigurowanie i uzyskiwanie analizatora składni opartego na SAX w celu analizowania dokumentów XML.

  • The SAXParser definiuje API, która otacza XmlReader klasy wykonania.

  • Pakiet definiuje podstawowe interfejsy API SAX.

  • Java Runtime pochodzi z domyślnej implementacji XMLReader

SAXParserFactory ukrywa których szczegóły (SAX1) ParserFactory/(Sax2) XMLReaderFactory ... od ciebie.

Jeśli chcesz, aby móc zastąpić domyślny JAXP Parser przez innego JAXP Parser (może być znany incomapatibilty/błąd w implementacji domyślnej) realizacja należy użyć sprzedawca neutralne SAXParserFactory.

Jeśli wiesz, że Twoja aplikacja zawsze będzie korzystać z SAX2XMLReader, możesz użyć XMLReaderFactory.

2

Elliotte Rusty Harold, który napisał książkę na temat przetwarzania XML w Javie, napisał kiedyś:

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 

nie będę rzeczywiście iść tak daleko (i jeśli to zrobiłem, chciałbym spróbować zrobić to gramatyczny). Podobnie jak wiele JAXP, nie jest to najcudowniejszy kawałek projektu; ale używam go jako domyślnego sposobu pobrania instancji analizatora składni, chociażby dlatego, że jest zgodny z innymi częściami JAXP.

Historycznie oba zostały opracowane równolegle. JAXP początkowo próbował dodać brakujące funkcje do SAX1, ale równolegle, SAX2 nadchodził i wypełniał niektóre z luk, więc ta konkretna luka została wypełniona dwukrotnie.

Powiązane problemy