XML è l'acronimo di Extensible Markup Language.
Di seguito sono riportati i vantaggi offerti da XML:
Technology agnostic- Essendo testo semplice, XML è indipendente dalla tecnologia. Può essere utilizzato da qualsiasi tecnologia per l'archiviazione e la trasmissione dei dati.
Human readable- XML utilizza un semplice formato di testo. È leggibile e comprensibile dall'uomo.
Extensible - in XML, i tag personalizzati possono essere creati e utilizzati molto facilmente.
Allow Validation - Utilizzando XSD, DTD e struttura XML possono essere convalidati facilmente.
Di seguito sono riportati gli svantaggi dell'utilizzo di XML:
Redundant Syntax - Normalmente il file XML contiene molti termini ripetitivi.
Verbose-Essendo un linguaggio dettagliato, la dimensione del file XML aumenta i costi di trasmissione e archiviazione.
L'analisi di XML si riferisce al passare attraverso il documento XML per accedere ai dati o per modificare i dati in un modo o nell'altro.
XML Parser fornisce il modo per accedere o modificare i dati presenti in un documento XML. Java fornisce più opzioni per analizzare il documento XML.
Di seguito sono riportati vari tipi di parser comunemente utilizzati per analizzare i documenti XML:
Dom Parser - Analizza il documento caricando il contenuto completo del documento e creando in memoria il suo albero tecnico completo.
SAX Parser- Analizza il documento sui trigger basati sugli eventi. Non carica il documento completo nella memoria.
JDOM Parser - Analizza il documento in modo simile al parser DOM ma in modo più semplice.
StAX Parser - Analizza il documento in modo simile al parser SAX ma in modo più efficiente.
XPath Parser - Analizza l'XML in base all'espressione e viene ampiamente utilizzato in combinazione con XSLT.
DOM4J Parser - Una libreria java per analizzare XML, XPath e XSLT utilizzando Java Collections Framework, fornisce supporto per DOM, SAX e JAXP.
DOM sta per Document Object Model.
DOM sta per Document Object Model ed è una raccomandazione ufficiale del World Wide Web Consortium (W3C). Definisce un'interfaccia che consente ai programmi di accedere e aggiornare lo stile, la struttura e il contenuto dei documenti XML. I parser XML che supportano il DOM implementano tale interfaccia.
Dovresti usare un parser DOM quando:
Hai bisogno di sapere molto sulla struttura di un documento
È necessario spostare parti del documento (ad esempio, potresti voler ordinare determinati elementi)
È necessario utilizzare le informazioni nel documento più di una volta
Quando analizzi un documento XML con un parser DOM, ottieni una struttura ad albero che contiene tutti gli elementi del tuo documento. Il DOM fornisce una varietà di funzioni che puoi usare per esaminare il contenuto e la struttura del documento.
Il DOM è un'interfaccia comune per manipolare le strutture dei documenti. Uno dei suoi obiettivi di progettazione è che il codice Java scritto per un parser conforme a DOM debba essere eseguito su qualsiasi altro parser conforme a DOM senza modifiche.
Il DOM definisce diverse interfacce Java. Ecco le interfacce più comuni:
Node - Il tipo di dati di base del DOM.
Element - La stragrande maggioranza degli oggetti con cui avrai a che fare sono Elementi.
Attr Rappresenta un attributo di un elemento.
Text Il contenuto effettivo di un elemento o Attr.
DocumentRappresenta l'intero documento XML. Un oggetto Document viene spesso definito albero DOM.
Quando lavori con il DOM, ci sono diversi metodi che utilizzerai spesso:
Document.getDocumentElement() - Restituisce l'elemento radice del documento.
Node.getFirstChild() - Restituisce il primo figlio di un dato nodo.
Node.getLastChild() - Restituisce l'ultimo figlio di un dato nodo.
Node.getNextSibling() - Questi metodi restituiscono il fratello successivo di un dato nodo.
Node.getPreviousSibling() - Questi metodi restituiscono il fratello precedente di un dato nodo.
Node.getAttribute(attrName) - Per un dato nodo, restituisce l'attributo con il nome richiesto.
Sì! Utilizzando il parser DOM, possiamo analizzare, modificare o creare un documento XML.
SAX sta per Simple API for XML.
SAX Parser è un parser basato su eventi per documenti xml.
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 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.
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 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 SAX funziona bene per un documento XML che arriva su un flusso
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
L'interfaccia ContentHandler 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.
L'interfaccia degli attributi 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)
No! Utilizzando il parser SAX, possiamo solo analizzare o modificare un documento XML.
JDOM è una libreria open source basata su Java per analizzare il documento XML ed è tipicamente un'API per sviluppatori Java.
È ottimizzato per java, utilizza raccolte java come List e Arrays. Funziona con le API DOM e SAX e combina il meglio dei due. Ha un ingombro di memoria ridotto ed è veloce quasi quanto SAX.
Dovresti usare un parser JDOM quando:
Hai bisogno di sapere molto sulla struttura di un documento.
È necessario spostare parti del documento (ad esempio, potresti voler ordinare determinati elementi).
È necessario utilizzare le informazioni nel documento più di una volta.
Sei uno sviluppatore Java e desideri sfruttare l'analisi ottimizzata per Java di XML.
Quando si analizza un documento XML con un parser JDOM, si ottiene la flessibilità di recuperare una struttura ad albero che contiene tutti gli elementi del documento senza influire sull'impronta di memoria dell'applicazione. Il JDOM fornisce una varietà di funzioni di utilità che è possibile utilizzare per esaminare il contenuto e la struttura del documento nel caso in cui il documento sia ben strutturato e la sua struttura sia nota.
JDOM offre agli sviluppatori Java flessibilità e facilità di manutenzione del codice di analisi xml. È API leggero e veloce.
JDOM definisce diverse classi Java. Ecco le classi più comuni:
Document- Rappresenta l'intero documento XML. Un oggetto Document viene spesso definito albero DOM.
Element- Rappresenta un elemento XML. L'oggetto elemento ha metodi per manipolare i suoi elementi figlio, il suo testo, attributi e spazi dei nomi.
AttributeRappresenta un attributo di un elemento. L'attributo ha un metodo per ottenere e impostare il valore dell'attributo. Ha un tipo genitore e attributo.
Text Rappresenta il testo del tag XML.
Comment Rappresenta i commenti in un documento XML.
Quando lavori con JDOM, ci sono diversi metodi che utilizzerai spesso:
SAXBuilder.build(xmlSource) - Costruisci il documento JDOM dal sorgente xml.
Document.getRootElement() - Ottieni l'elemento radice dell'XML.
Element.getName() - Ottieni il nome del nodo XML.
Element.getChildren() - Ottieni tutti i nodi figlio diretti di un elemento.
Node.getChildren(Name) - Ottieni tutti i nodi figlio diretti con un determinato nome.
Node.getChild(Name) - Ottieni il primo nodo figlio con il nome dato.
Sì! Utilizzando il parser JDOM, possiamo analizzare, modificare e creare un documento XML.
StAX è un'API basata su JAVA per analizzare il documento XML in modo simile al parser SAX, ma StAX è un'API PULL dove 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 in caso di parser SAX, l'applicazione client è richiesta per ottenere informazioni quando il parser SAX notifica all'applicazione client che le informazioni sono disponibili.
Sì! Usando il parser StAX, possiamo analizzare, modificare e creare un documento XML.
Sì! StAX è un'API PULL.
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.
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
Questa classe fornisce un iteratore di eventi che può essere utilizzato per scorrere gli 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.
Questa interfaccia specifica i metodi per creare un evento.
add(Event event) - Aggiungi eventi contenenti elementi a XML.
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() - utilizzato per recuperare l'evento successivo.
boolean hasNext() - utilizzato per verificare l'esistenza o meno di ulteriori eventi
String getText() - utilizzato per ottenere il testo di un elemento
String getLocalName() - utilizzato per ottenere il nome di un elemento
Questa interfaccia specifica i metodi per creare un evento.
writeStartElement(String localName) - Aggiungi l'elemento iniziale del nome.
writeEndElement(String localName) - Aggiungi l'elemento finale del nome.
writeAttribute(String localName, String value) - Scrive l'attributo in un elemento.
XPath è una raccomandazione ufficiale del World Wide Web Consortium (W3C). Definisce una lingua per trovare informazioni in un file XML. Viene utilizzato per attraversare elementi e attributi di un documento XML. XPath fornisce vari tipi di espressioni che possono essere utilizzate per richiedere informazioni rilevanti dal documento XML.
Di seguito sono riportati i componenti chiave di XPath:
Structure Definitions - XPath definisce le parti di un documento XML come elemento, attributo, testo, spazio dei nomi, istruzione di elaborazione, commento e nodi del documento.
Path Expressions XPath fornisce potenti espressioni di percorso per selezionare i nodi o l'elenco di nodi nei documenti XML.
Standard FunctionsXPath fornisce una ricca libreria di funzioni standard per la manipolazione di valori di stringa, valori numerici, confronto di data e ora, manipolazione di nodi e QName, manipolazione di sequenze, valori booleani ecc.
Major part of XSLTXPath è uno degli elementi principali nello standard XSLT ed è necessario disporre di conoscenze per poter lavorare con i documenti XSLT.
W3C recommendationXPath è una raccomandazione ufficiale del World Wide Web Consortium (W3C).
I predicati vengono utilizzati per trovare un nodo specifico o un nodo contenente un valore specifico e vengono definiti utilizzando [...].
Espressione | Risultato |
---|---|
/ classe / studente [1] | Seleziona il primo elemento studente che è il figlio dell'elemento classe. |
/ classe / studente [last ()] | Seleziona l'ultimo elemento studente che è il figlio dell'elemento classe. |
/ classe / studente [ultimo () - 1] | Seleziona il penultimo elemento studente che è il figlio dell'elemento classe. |
// studente [@ rollno = '493'] | Seleziona tutti gli elementi dello studente che hanno un attributo denominato rollno con un valore di '493' |
XPath utilizza un'espressione di percorso per selezionare un nodo o un elenco di nodi da un documento xml. Di seguito è riportato l'elenco di percorsi ed espressioni utili per selezionare qualsiasi nodo / elenco di nodi da un documento xml.
Espressione | Descrizione |
---|---|
nome-nodo | Seleziona tutti i nodi con il nome specificato "nome nodo" |
/ | La selezione inizia dal nodo radice |
// | La selezione inizia dal nodo corrente che corrisponde alla selezione |
. | Seleziona il nodo corrente |
.. | Seleziona il genitore del nodo corrente |
@ | Seleziona gli attributi |
alunno | Esempio: seleziona tutti i nodi con il nome "studente" |
classe / studente | Esempio: seleziona tutti gli elementi degli studenti che sono figli della classe |
//alunno | Seleziona tutti gli elementi degli studenti indipendentemente da dove si trovano nel documento |
No! Il parser XPath viene utilizzato per navigare solo nel documento XML. È meglio usare il parser DOM per creare XML.
DOM4J è una libreria open source basata su Java per analizzare documenti XML ed è un'API altamente flessibile, ad alte prestazioni ed efficiente in termini di memoria. È ottimizzato per Java, utilizza raccolte Java come List e Arrays. Funziona con DOM, SAX, XPath e XSLT. Può analizzare documenti XML di grandi dimensioni con un ingombro di memoria molto basso.
Dovresti usare un parser DOM4J quando:
Hai bisogno di sapere molto sulla struttura di un documento
È necessario spostare parti del documento (ad esempio, potresti voler ordinare determinati elementi)
È necessario utilizzare le informazioni nel documento più di una volta
Sei uno sviluppatore Java e desideri sfruttare l'analisi ottimizzata per Java di XML.
Quando si analizza un documento XML con un parser DOM4J, si ottiene la flessibilità di recuperare una struttura ad albero che contiene tutti gli elementi del documento senza influire sull'impronta di memoria dell'applicazione. DOM4J fornisce una varietà di funzioni di utilità che puoi utilizzare per esaminare il contenuto e la struttura del documento nel caso in cui il documento sia ben strutturato e la sua struttura sia nota. DOM4J utilizza l'espressione XPath per navigare nel documento XML.
DOM4J offre agli sviluppatori Java flessibilità e facilità di manutenzione del codice di analisi xml. È API leggero e veloce.
Il DOM4J definisce diverse classi Java. Ecco le classi più comuni:
Document- Rappresenta l'intero documento XML. Un oggetto Document viene spesso definito albero DOM.
Element- Rappresenta un elemento XML. L'oggetto elemento ha metodi per manipolare i suoi elementi figlio, il suo testo, attributi e spazi dei nomi.
AttributeRappresenta un attributo di un elemento. L'attributo ha un metodo per ottenere e impostare il valore dell'attributo. Ha un tipo genitore e attributo.
Node Rappresenta Element, Attribute o ProcessingInstruction
Quando lavori con DOM4J, ci sono diversi metodi che utilizzerai spesso:
SAXReader.read(xmlSource)() - Costruisci il documento DOM4J dal sorgente xml.
Document.getRootElement() - Ottieni l'elemento radice dell'XML.
Element.node(index) - Ottieni il nodo XML in un particolare indice nell'elemento.
Element.attributes() - Ottieni tutti gli attributi di un elemento.
Node.valueOf(@Name) - Ottieni il valore di un attributo con il nome dell'elemento.
Sì! Utilizzando il parser DOM4J, possiamo analizzare, modificare e creare un documento XML.