L’affermarsi di Internet e della programmazione distribuita, ha creato la necessità di definire degli standard, ovvero dei formati necessari alla scrittura dei dati, riconosciuti a livello globale.
Sicuramente l’XML (eXtended Markup Language) è il più usato e universalmente riconosciuto di questi, sia per la sua semplicità e leggerezza, sia per la facilità con cui può essere letto.
Per queste ragioni, tutte le piattaforme hanno nel tempo sviluppato delle librerie che forniscono al programmatore dei metodi per poter interagire con i file XML; e proprio su questo Java non poteva mancare.
Vi sono infatti numeroso librerie che svolgono le funzioni sopra citate. Tra queste merita un posto di particolare rilievo JDOM, una API di semplice utilizzo, ma al tempo stesso molto potente e completa.
Utilizzando JDOM sarete in grado di:
- Scorrere un file XML, dalla radice alle foglie
- Scrivere un file XML, definendone la struttura dell’albero senza vincoli di alcun tipo.
Le librerie di JDOM possono essere scaricate sulla home page www.jdom.org. In questo articolo faremo riferimento alla versione 1.1, che attualmente è l’ultima realease.
Passiamo ora all’utilizzo pratico di tali librerie.
Leggere un file XML è molto semplice.
Per cominciare abbiamo bisogno di un oggetto SAXBuilder:
SAXBuilder builder = new SAXBuilder();
Questo oggetto fornisce il metodo build il quale si occupa di effettuare il parsing del file XML passatogli in argomento, e di salvarlo in un oggetto Document fornito sempre dalle librerie JDOM.
Document document = builder.build(new File("foo.xml"));
Quello che ora ci interessa, è riuscire a scorrere la struttura che è stata create nell’oggetto document. Per fare ciò, sarà necessario ottenere la radice del documento (Ogni XML “well formed” deve avere un ed un solo elemento radice):
Element rootElement = document.getRootElement();
Abbiamo quindi fatto conoscenza con la classe Element, che è un po’ la classe fondamentale di questa libreria. Ecco alcune delle funzionalità principali fornite da questa classe:
- Ottenere tutti gli elementi figli dell’elemento in questione:
List children = rootElement.getChildren();
Iterator iterator = children.iterator();
while (iterator.hasNext()){
Element element = (Element)iterator.next();
// ...
}
- Ottenere tutti gli attributi dell’elemento in questione:
List attributes = rootElement.getAttributes();
Iterator iterator = children.iterator();
while (iterator.hasNext()){
Attribute attribute = (Attribute)iterator.next();
String name = attribute.getName();
String value = attribute.getValue();
//...
}
- Ottenere il testo compreso fra i tag di apertura e chiusura dell’elemento in questione:
String text = rootElement.getText();
Ora siamo in grado di leggere un qualsiasi file XML, a prescindere dalla sua complessità e profondità.
Nel prossimo articolo impareremo a scrivere un file XML e faremo un esempio concreto di lettura e scrittura.