Java LanguageAnalisi XML usando le API JAXP


Osservazioni

L'analisi XML è l'interpretazione dei documenti XML al fine di manipolare il loro contenuto utilizzando costrutti sensibili, siano essi "nodi", "attributi", "documenti", "spazi dei nomi" o eventi correlati a questi costrutti.

Java ha un'API nativa per la gestione dei documenti XML, denominata JAXP o API Java per l'elaborazione XML . JAXP e un'implementazione di riferimento sono stati forniti in bundle con ogni versione Java da Java 1.4 (JAXP v1.1) e si sono evoluti da allora. Java 8 fornito con JAXP versione 1.6.

L'API offre diversi modi di interagire con i documenti XML, che sono:

  • L'interfaccia DOM (Document Object Model)
  • L'interfaccia SAX (Simple API for XML)
  • L'interfaccia StAX (Streaming API for XML)

Principi dell'interfaccia DOM

L'interfaccia DOM mira a fornire un modo W3C DOM di interpretare XML. Varie versioni di JAXP hanno supportato vari Livelli DOM di specifica (fino al livello 3).

Sotto l'interfaccia Modello oggetto documento, un documento XML viene rappresentato come un albero, a partire da "Elemento documento". Il tipo di base dell'API è il tipo di Node , consente di navigare da un Node al relativo genitore, ai suoi figli o ai suoi fratelli (sebbene, non tutti i Node possano avere figli, ad esempio, i nodi di Text sono finali nell'albero, e non avere mai bambini). I tag XML sono rappresentati come Element s, che estendono notevolmente il Node con metodi relativi agli attributi.

L'interfaccia DOM è molto utile poiché consente l'analisi "a una riga" di documenti XML come alberi e consente di modificare facilmente l'albero costruito (aggiunta del nodo, soppressione, copia, ...) e infine la sua serializzazione (torna al disco ) post modifiche. Questo ha un prezzo, però: l'albero risiede nella memoria, quindi gli alberi DOM non sono sempre pratici per enormi documenti XML. Inoltre, la costruzione dell'albero non è sempre il modo più rapido per gestire il contenuto XML, specialmente se non si è interessati a tutte le parti del documento XML.

Principi dell'interfaccia SAX

L'API SAX è un'API event-oriented per gestire documenti XML. Sotto questo modello, i componenti di un documento XML vengono interpretati come eventi (ad es. "Un tag è stato aperto", "un tag è stato chiuso", "è stato rilevato un nodo di testo", "è stato riscontrato un commento"). ..

L'API SAX utilizza un approccio "push parsing", in cui un Parser SAX è responsabile dell'interpretazione del documento XML e richiama i metodi su un delegato (un ContentHandler ) per gestire qualsiasi evento venga trovato nel documento XML. Di solito, non si scrive mai un parser, ma si fornisce un gestore per raccogliere tutte le informazioni necessarie dal documento XML.

L'interfaccia SAX supera le limitazioni dell'interfaccia DOM mantenendo solo i dati minimi necessari a livello di parser (ad es. Contesti namespace, stato di validazione), quindi, solo le informazioni che sono tenute da ContentHandler - di cui tu, lo sviluppatore, è responsabile - sono tenuto in memoria. Il compromesso è che non c'è modo di "tornare indietro nel tempo / il documento XML" con un simile approccio: mentre il DOM consente a un Node di tornare ai suoi genitori, non esiste tale possibilità in SAX.

Principi dell'interfaccia StAX

L'API StAX adotta un approccio simile all'elaborazione di XML come API SAX (ovvero, basata su eventi), l'unica differenza molto significativa è che StAX è un parser di pull (dove SAX era un parser di push). In SAX, il Parser controllo e utilizza i callback su ContentHandler . In Stax, chiami il parser e controlli quando / se vuoi ottenere il successivo "evento" XML.

L'API inizia con XMLStreamReader (o XMLEventReader ), che sono i gateway attraverso i quali lo sviluppatore può chiedere nextEvent() , in modo iteratore.

Analisi XML usando le API JAXP Esempi correlati