Parser SAX - Panoramica
SAX (l'API semplice per 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 in fase di elaborazione - un elemento e un attributo, alla volta in ordine sequenziale a partire dalla parte superiore del documento e termina con la chiusura di l'elemento ROOT.
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.
Riporta il programma applicativo, la natura dei token che il parser ha riscontrato nel momento in cui 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 è annidato in profondità.
Stai elaborando un documento XML molto grande, il cui albero DOM consumerà molta 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 visti 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 modo forwardonly.
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 all'inizio 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 i dati del personaggio.
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 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)