2012-05-14 13 views
7

Ambos parecen tener el mismo objetivo (crear un XMLReader). Algunos tutoriales contienen el uno, algunos el otro.Diferencia SAXParserFactory XMLReaderFactory. ¿Cuál elegir?

SAXParserFactory:

ejemplo:

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

XMLReaderFactory:

código de ejemplo:

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

pregunta:

¿Son estas las principales diferencias o hay algunos que he supervisado.

¿Cuál debe elegir?

+0

SAXParserFactory es JAXP, mientras que XMLReaderFactory es la API SAX "oficial". Recuerdo el viejo libro de SAX2 de O'Reilly que recomendaba la API oficial, debido a la forma en que manejaba los espacios de nombres. No sé si esto ya es relevante. Pero supongo que usaría XMLReaderFactory a menos que necesite JAXP por alguna razón. Tal vez alguien más pueda proporcionar algo de información más actual. –

Respuesta

4

Las principales JAXP APIs se definen en el paquete javax.xml.parsers. Ese paquete contiene clases de fábrica neutrales para el vendedor como el SAXParserFactory que le da un S AXParser.

El SAXParserFactory define una API de fábrica que permite a las aplicaciones configurar y obtener un analizador basado en SAX para analizar documentos XML.

  • El SAXParser define la API que envuelve una clase de implementación XMLReader .

  • El paquete org.xml.sax define las API SAX básicas.

  • La ejecución de Java viene con una implementación por defecto XMLReader

El SAXParserFactory oculta los detalles de los cuales (SAX1) XMLReaderFactory ParserFactory/(de SAX2), ... de usted.

Si usted quiere ser capaz de reemplazar el analizador por defecto JAXP por una diferente JAXP Analizador (puede haber un incomapatibilty/fallo conocido en la implementación por defecto) la aplicación debe utilizar el proveedor neutral SAXParserFactory.

Si sabe que su aplicación siempre usará un SAX2XMLReader, puede usar el XMLReaderFactory.

2

Elliotte oxidado Harold, que ha escrito un libro sobre el procesamiento de XML en Java, escribió una vez:

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 

no me realmente ir tan lejos (y si lo hiciera, me gustaría probar y que sea gramatical) Al igual que muchos JAXP, no es la pieza de diseño más maravillosa; pero lo uso como la forma predeterminada de obtener una instancia de analizador, aunque solo sea porque es coherente con otras partes de JAXP.

Históricamente, los dos se desarrollaron en paralelo. JAXP intentó originalmente agregar la funcionalidad faltante a SAX1, pero en paralelo, SAX2 estaba llegando y llenando algunas de las lagunas, por lo que esta brecha en particular se llenó dos veces.

Cuestiones relacionadas