Parser Java StAX - Panoramica
StAX è un'API basata su Java per analizzare il documento XML in modo simile al parser SAX. Ma ci sono due principali differenze tra le due API:
StAX è un'API PULL, mentre SAX è un'API PUSH. Significa che in caso di parser StAX, un'applicazione client deve chiedere al parser StAX di ottenere informazioni da XML ogni volta che ne ha bisogno. Ma nel caso del parser SAX, è necessaria un'applicazione client per ottenere informazioni quando il parser SAX notifica all'applicazione client che le informazioni sono disponibili.
L'API StAX può leggere e scrivere documenti XML. Utilizzando SAX API, un file XML può essere solo letto.
Configurazione dell'ambiente
Per utilizzare il parser StAX, dovresti avere stax.jar nel classpath della tua applicazione.
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 è "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 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 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 solo in avanti.
Se è necessario tenere traccia dei dati che il parser ha visto o dove il parser ha cambiato l'ordine degli elementi, è necessario scrivere il codice e memorizzare i dati da soli.
Classe XMLEventReader
Questa classe fornisce un iteratore di eventi che può essere utilizzato per scorrere gli eventi mentre si verificano durante l'analisi di un documento XML.
StartElement asStartElement() - Utilizzato per recuperare il valore e gli attributi di un 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) - Aggiungi 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 di un 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) - Aggiungi un elemento iniziale del nome dato.
writeEndElement(String localName) - Aggiungi un elemento finale del nome dato.
writeAttribute(String localName, String value) - Scrivi attributi in un elemento.