2012-12-14 13 views
6

Qual è la differenza tra due snippet di seguito, se devo solo analizzare l'XML?Differenza tra SAXParser e XMLReader

1.By utilizzando SAXParser parse metodo:

SAXParserFactory sfactory = SAXParserFactory.newInstance(); 
SAXParser parser = sfactory.newSAXParser(); 
parser.parse(new File(filename), new DocHandler()); 

Ora usando il metodo di XMLReader parse acquisito da SAXParser

SAXParserFactory sfactory = SAXParserFactory.newInstance(); 
SAXParser parser = sfactory.newSAXParser(); 
XMLReader xmlparser = parser.getXMLReader(); 
xmlparser.setContentHandler(new DocHandler()); 
xmlparser.parse(new InputSource("test1.xml")); 

Nonostante di ottenere una maggiore flessibilità, c'è qualche altra differenza?

risposta

8

I metodi parse di SAXParser delegano solo a un'istanza interna di XMLReader e in genere sono più convenienti. Per alcuni casi di utilizzo più avanzati è necessario utilizzare XMLReader. Alcuni esempi sarebbero

  • Impostazione delle funzioni non standard dell'attuazione
  • Impostazione diverse classi come ContentHandler, EntityResolver o ErrorHandler
  • commutazione gestori durante l'analisi
0

http://docs.oracle.com/javase/1.5.0/docs/api/org/xml/sax/XMLReader.html. dare un'occhiata al link per il lettore XML e dare un'occhiata al seguente link per parser sax. http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/SAXParser.html.

L'utilizzo di un parser diverso dipende da ciò che il parser deve fare. Se modifichi, cancellando contenuti in xml, puoi usare il parser W3C Dom. Se si desidera analizzare e ottenere elementi, è possibile utilizzare parser SAX. Ce ne sono alcuni là fuori. Quindi dipende davvero da quello che vuoi.

+0

dispiace ma sono consapevole di parser DOM . Volevo solo sapere perché SAXParser e XMLReader forniscono entrambi il metodo 'parse'. C'è qualche ragione tecnica? – sakura

3

Come hai notato XMLReader appartiene a org.xml.sax (che viene da http://www.saxproject.org/) e SAXParser a javax.xml.parsers. SAXParser utilizza internamente XMLReader. È possibile lavorare direttamente con XMLReader

XMLReader xr = XMLReaderFactory.createXMLReader(); 
xr.setContentHandler(handler); 
xr.setDTDHandler(handler); 
... 

ma si noterà che SAXParser è più conveniente da utilizzare. Cioè, SAXParser è stato aggiunto per comodità.