Parser SAX Java - Panoramica
SAX (Simple API for XML) è un parser basato su eventi per documenti XML. A differenza di un parser DOM, un parser SAX non crea alcun albero di analisi. SAX è un'interfaccia di streaming per XML, il che significa che le applicazioni che utilizzano SAX ricevono notifiche di eventi sul documento XML che sta elaborando un elemento e un attributo, in un momento in ordine sequenziale a partire dalla parte superiore del documento e termina con la chiusura del Elemento RADICE.
Legge un documento XML dall'alto verso il basso, riconoscendo i token che compongono un documento XML ben formato.
I token vengono elaborati nello stesso ordine in cui appaiono nel documento.
Segnala al programma applicativo la natura dei token che il parser ha riscontrato quando si verificano.
Il programma applicativo fornisce un gestore di "eventi" che deve essere registrato con il parser.
Quando i token vengono identificati, i metodi di callback nel gestore vengono richiamati con le informazioni pertinenti.
Quando usare?
Dovresti usare un parser SAX quando:
È possibile elaborare il documento XML in modo lineare dall'alto verso il basso.
Il documento non è nidificato in profondità.
Stai elaborando un documento XML molto grande il cui albero DOM consumerebbe troppa memoria. Le implementazioni DOM tipiche utilizzano dieci byte di memoria per rappresentare un byte di XML.
Il problema da risolvere riguarda solo una parte del documento XML.
I dati sono disponibili non appena vengono visualizzati dal parser, quindi SAX funziona bene per un documento XML che arriva su un flusso.
Svantaggi di SAX
Non abbiamo accesso casuale a un documento XML poiché viene elaborato in modalità forward-only.
Se è necessario tenere traccia dei dati che il parser ha visto o modificare l'ordine degli elementi, è necessario scrivere il codice e memorizzare i dati da soli.
Interfaccia ContentHandler
Questa interfaccia specifica i metodi di callback che il parser SAX utilizza per notificare a un programma applicativo i componenti del documento XML che ha visto.
void startDocument() - Chiamato all'inizio di un documento.
void endDocument() - Chiamato alla fine di un documento.
void startElement(String uri, String localName, String qName, Attributes atts) - Chiamato all'inizio di un elemento.
void endElement(String uri, String localName,String qName) - Chiamato alla fine di un elemento.
void characters(char[] ch, int start, int length) - Chiamato quando vengono rilevati dati di carattere.
void ignorableWhitespace( char[] ch, int start, int length) - Chiamato quando è presente un DTD e vengono rilevati spazi ignorabili.
void processingInstruction(String target, String data) - Chiamato quando viene riconosciuta un'istruzione di elaborazione.
void setDocumentLocator(Locator locator)) - Fornisce un localizzatore che può essere utilizzato per identificare le posizioni nel documento.
void skippedEntity(String name) - Chiamato quando viene rilevata un'entità non risolta.
void startPrefixMapping(String prefix, String uri) - Chiamato quando viene definita una nuova mappatura dello spazio dei nomi.
void endPrefixMapping(String prefix) - Chiamato quando una definizione dello spazio dei nomi termina il suo ambito.
Interfaccia degli attributi
Questa interfaccia specifica i metodi per elaborare gli attributi collegati a un elemento.
int getLength() - Restituisce il numero di attributi.
String getQName(int index)
String getValue(int index)
String getValue(String qname)