StAX Parser - Panoramica
StAX è un'API basata su JAVA per analizzare il documento XML in modo simile al parser SAX. Ma ci sono due principali punti di differenza tra le due API:
StAX è un'API PULL mentre SAX è un'API PUSH. Significa che in caso di parser StAX, l'applicazione client deve chiedere al parser StAX di ottenere informazioni da XML ogni volta che ne ha bisogno, ma nel caso del parser SAX, l'applicazione client deve ottenere informazioni quando il parser SAX notifica all'applicazione client tali informazioni è disponibile.
L'API StAX può leggere e scrivere documenti XML. Utilizzando SAX API, xml può essere solo letto.
Di seguito sono riportate le caratteristiche dell'API StAX:
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 nel momento in cui si verificano.
Il programma applicativo fornisce un lettore di "eventi" che funge da iteratore e itera sull'evento per ottenere le informazioni richieste. Un altro lettore disponibile è il lettore "cursore" che funge da puntatore ai nodi xml.
Quando gli eventi vengono identificati, gli elementi xml possono essere recuperati dall'oggetto evento e possono essere ulteriormente elaborati.
Quando usare?
Dovresti usare un parser StAX 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à 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 visti dal parser, quindi StAX 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.
Classe XMLEventReader
Questa classe fornisce l'iteratore di eventi che puòessere usato per iterare sugli eventi mentre si verificano durante l'analisi del documento XML
StartElement asStartElement() - Utilizzato per recuperare il valore e gli attributi dell'elemento.
EndElement asEndElement() - Chiamato alla fine di un elemento.
Characters asCharacters() - Può essere utilizzato per ottenere caratteri come CDATA, spazi bianchi, ecc.
Classe XMLEventWriter
Questa interfaccia specifica i metodi per creare un evento.
add(Event event) - Aggiunge eventi contenenti elementi a XML.
Classe XMLStreamReader
Questa classe fornisce un iteratore di eventi che può essere utilizzato per scorrere gli eventi mentre si verificano durante l'analisi del documento XML
int next() - Usato per recuperare il prossimo evento.
boolean hasNext() - Utilizzato per verificare l'esistenza o meno di ulteriori eventi
String getText() - Usato per ottenere il testo di un elemento
String getLocalName() - Usato per ottenere il nome di un elemento
Classe XMLStreamWriter
Questa interfaccia specifica i metodi per creare un evento.
writeStartElement(String localName) - Aggiunge l'elemento iniziale di un dato nome.
writeEndElement(String localName) - Aggiunge l'elemento finale di un dato nome.
writeAttribute(String localName, String value) - Scrive l'attributo su un elemento.