Molto spesso capita di interfacciarsi con applicazioni tramite XML, oppure usufruire delle API di un servizio web che esportano i propri dati su dei file XML. Ebbene, in questo post spiegherò come leggere un file XML da Java, supponendo che il file XML sia una risorsa web, in particolare questa:
che è un file che ci dà informazioni su una traccia musicale (Believe di Cher). Per semplicità, supponiamo che a noi interessa sapere la durata di questo brano e la risorsa immagine che è la cover dell'album a cui appartiene. Innanzitutto, per leggere un file XML l'applicazione che si propone di farlo deve conoscere come è strutturato questo file, specifico per ogni servizio. Per esempio, questo file di last.fm ha come root element il tag <lfm status="ok"> che ci dice che il servizio di last.fm attualmente funziona. Tralasciando altre descrizioni del file XML, arriviamo a quello che ci interessa: la durata del brano si trova in <track>--><duration>, mentre l'immagine dell'album si trova in <album>--><image>. Nota che ci sono quattro varianti del tag <image> che si differenziano per il valore del parametro "size". Supponiamo a noi interessa una dimensione media quindi scegliamo il valore "medium" del suddetto parametro. Passiamo allora al codice.
Innanzitutto ci serve una libreria; io uso e mi trovo bene con jdom (www.jdom.org).
import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; public class prova { public static void main(String[] args) { try { SAXBuilder builder = new SAXBuilder(); Document document= builder.build("http://ws.audioscrobbler.com/2.0/?method=track.getInfo&api_key=91de4539bbb0d5b2bdc36d23d3906246&artist=cher&track=believe"); Element duration = document.getRootElement().getChild("track").getChild("duration"); System.out.printf("La durata è: "+duration.getValue()); java.util.List albumImage = document.getRootElement().getChild("track").getChild("album").getChildren("image"); String albumImageResource = ""; java.util.Iterator iteratore = albumImage.iterator(); while (iteratore.hasNext()){ Element elemento = (Element)iteratore.next(); if (elemento.getAttributeValue("size").equals("medium")) { albumImageResource = elemento.getValue(); break; } } System.out.printf("\nLa risorsa della cover dell'album è: "+albumImageResource); } catch (org.jdom.JDOMException e) { System.out.printf(e.toString()); } catch (java.io.IOException e) { System.out.printf(e.toString()); } } }
Come vedete il tutto è molto intuitivo, è possibile infatti per ogni tag ottenere un valore, un sottotag in particolare, o una lista di sottotag, o ancora la lista completa; e per ogni tag ottenere anche i parametri e il valore di ciascun parametro.
Nessun commento:
Posta un commento