Il linguaggio universale per memorizzare e trasportare dati. Impara la sintassi, gli elementi e gli attributi, i namespace, come visualizzare i dati con CSS e XSLT, navigarli con XPath e validarli con DTD e XSD. Con esempi pratici ed esercizi.
Introduzione a XML
XML (eXtensible Markup Language) è un linguaggio di marcatura progettato per memorizzare e trasportare dati in un formato testuale, leggibile sia dalle persone sia dalle macchine. A differenza di HTML, che mostra i dati, XML li descrive.
Caratteristica
Descrizione
Estensibile
Definisci tu i tag in base ai tuoi dati
Auto-descrittivo
I nomi dei tag spiegano il contenuto
Indipendente
Da software e hardware: solo testo
Gerarchico
I dati sono organizzati ad albero
Standard W3C
Raccomandazione ufficiale dal 1998
XML è alla base di moltissime tecnologie: file di configurazione, feed RSS, documenti Office (.docx, .xlsx), SVG, SOAP, sitemap e molto altro.
Un documento XML completo
<?xml version="1.0" encoding="UTF-8"?>
<nota>
<a>Alice</a>
<da>Marco</da>
<oggetto>Promemoria</oggetto>
<corpo>Non dimenticare la lezione di sabato!</corpo>
</nota>
💡 XML non fa nulla da solo: è solo informazione racchiusa fra tag. Serve un programma (in JavaScript, Python, Java...) per inviarla, riceverla, memorizzarla o visualizzarla.
XML vs HTML
XML
HTML
Trasporta dati
Mostra dati
Tag definiti dall'utente
Tag predefiniti
Rigido sulla sintassi
Tollerante agli errori
Case-sensitive
Non case-sensitive
Come si usa XML
XML separa i dati dalla loro presentazione. Questo significa che gli stessi dati XML possono essere mostrati in pagine, app o report diversi senza essere modificati.
XML semplifica la condivisione dei dati
Essendo solo testo in formato indipendente dalla piattaforma, XML può essere scambiato fra sistemi incompatibili (Windows, Linux, mainframe) senza problemi di conversione.
⭐ Quando un nuovo dato (es. un nuovo libro) viene aggiunto, le applicazioni che leggono l'XML continuano a funzionare senza modifiche: XML è estendibile.
L'albero XML
I documenti XML formano una struttura ad albero che parte da una radice (root) e si ramifica in elementi figli. La terminologia ricalca quella di un albero genealogico: padre, figli, fratelli.
Possono contenere lettere, numeri, trattini, underscore e punti
Devono iniziare con una lettera o underscore (mai con un numero)
Non possono iniziare con le lettere xml
Non possono contenere spazi
Elementi vs Attributi
Spesso lo stesso dato può essere espresso come elemento o come attributo. In generale si preferiscono gli elementi per i dati veri e propri.
Stesso dato, due stili
<!-- Data come attributo -->
<nota data="2026-06-13">Ciao</nota>
<!-- Data come elemento (preferibile) -->
<nota>
<data>2026-06-13</data>
<testo>Ciao</testo>
</nota>
Gli attributi XML
Gli attributi forniscono informazioni aggiuntive su un elemento. Si scrivono nel tag di apertura come coppie nome="valore" e i valori vanno sempre fra virgolette (singole o doppie).
💡 Se il valore contiene virgolette doppie, racchiudilo fra virgolette singole: <testo nota='Disse "ciao"'/>
Quando NON usare gli attributi
Gli attributi hanno dei limiti: non possono contenere più valori, non possono descrivere strutture ad albero e sono più difficili da leggere e validare. Per i dati strutturati preferisci gli elementi figli.
Meglio elementi per dati complessi
<!-- Difficile da estendere -->
<libro titolo="XML" autore="Simone" anno="2026"/>
<!-- Più chiaro ed estendibile -->
<libro>
<titolo>XML</titolo>
<autore>Simone</autore>
<anno>2026</anno>
</libro>
I namespaces XML
I namespace evitano i conflitti di nomi quando si combinano documenti XML provenienti da vocabolari diversi. Due elementi <tabella> con significati diversi possono convivere distinguendoli con un prefisso.
Conflitto di nomi
<!-- tabella di mobili -->
<tabella>
<materiale>legno</materiale>
</tabella>
<!-- tabella HTML -->
<tabella>
<tr><td>A</td></tr>
</tabella>
Aprendo un file XML in un browser, viene mostrato l'albero grezzo con colori e possibilità di espandere/comprimere i nodi. Per una presentazione su misura servono CSS o XSLT.
XML con CSS
Si può collegare un foglio di stile CSS direttamente al documento XML:
⭐ Il CSS è utile per visualizzazioni semplici, ma per trasformazioni complesse (tabelle, ordinamenti, filtri) la scelta giusta è XSLT, che vedremo più avanti.
XMLHttpRequest
L'oggetto XMLHttpRequest (XHR) permette a JavaScript di richiedere dati da un server senza ricaricare la pagina. È il cuore storico di AJAX.
const serializer = new XMLSerializer();
const stringa = serializer.serializeToString(xmlDoc);
console.log(stringa);
XML DOM
Il DOM (Document Object Model) rappresenta il documento XML come un albero di nodi che si possono leggere, modificare, aggiungere ed eliminare via codice.
Metodo / proprietà
Cosa fa
getElementsByTagName(n)
Tutti gli elementi con quel nome
parentNode
Il nodo padre
childNodes
I nodi figli
textContent
Il testo contenuto
getAttribute(a)
Il valore di un attributo
Leggere e modificare il DOM
// Leggere
const autore = xmlDoc.getElementsByTagName("autore")[0];
console.log(autore.textContent);
// Modificare il testo
autore.textContent = "Alessandro Simone";
// Leggere un attributo
const libro = xmlDoc.getElementsByTagName("libro")[0];
console.log(libro.getAttribute("categoria"));
// Creare e aggiungere un nuovo elemento
const nuovo = xmlDoc.createElement("editore");
nuovo.textContent = "AlessandroSimone.it";
libro.appendChild(nuovo);
AJAX
AJAX (Asynchronous JavaScript And XML) è la tecnica che permette di aggiornare parti di una pagina scambiando dati con il server in background, senza ricaricarla. Nonostante il nome, oggi AJAX scambia spesso JSON anziché XML.
Come funziona AJAX
Un evento accade nella pagina (clic, caricamento...)
JavaScript crea una richiesta (XHR o fetch)
La richiesta parte verso il server in modo asincrono
Il server elabora e risponde (XML, JSON, testo)
JavaScript riceve la risposta e aggiorna il DOM della pagina
AJAX moderno con fetch
fetch("libreria.xml")
.then(risposta => risposta.text())
.then(testo => {
const xml = new DOMParser().parseFromString(testo, "text/xml");
const titoli = xml.getElementsByTagName("titolo");
for (const t of titoli) {
console.log(t.textContent);
}
})
.catch(err => console.error("Errore:", err));
⭐ AJAX è ciò che rende possibili le web app moderne: ricerche istantanee, infinite scroll, salvataggi automatici, tutto senza ricaricare la pagina.
XPath
XPath è un linguaggio per navigare e selezionare nodi all'interno di un documento XML, usando una sintassi a percorsi simile a quella dei file system.
Espressione
Seleziona
/libreria/libro
Tutti i libro figli di libreria (dalla radice)
//titolo
Tutti i titolo ovunque nel documento
//libro[1]
Il primo libro
//libro[@categoria]
I libro che hanno l'attributo categoria
//libro[prezzo>10]
I libro con prezzo maggiore di 10
@categoria
L'attributo categoria
Esempi di percorsi XPath
/libreria/libro/titolo seleziona tutti i titoli dei libri
//autore tutti gli autori, a qualsiasi livello
//libro[@categoria='web'] i libri di categoria "web"
//libro[last()] l'ultimo libro
//titolo[@lingua='it'] i titoli in italiano
XSLT (eXtensible Stylesheet Language Transformations) trasforma documenti XML in altri formati: HTML, testo o altro XML. Usa XPath per selezionare le parti da trasformare.
XQuery è il linguaggio per interrogare dati XML, come SQL lo è per i database relazionali. È costruito su XPath e usa le espressioni FLWOR.
Clausola
Significato
For
Itera su una sequenza di nodi
Let
Assegna una variabile
Where
Filtra i risultati
Order by
Ordina i risultati
Return
Costruisce il risultato
Una query FLWOR
for $libro in doc("libreria.xml")/libreria/libro
where $libro/prezzo > 0
order by $libro/titolo
return <risultato>{$libro/titolo}</risultato>
💡 XQuery viene eseguito da database XML (come BaseX o eXist-db) o da processori dedicati, non direttamente nel browser.
DTD — Document Type Definition
Una DTD definisce la struttura legale di un documento XML: quali elementi e attributi sono ammessi e come possono essere annidati. Un documento che rispetta la sua DTD si dice valido.
DTD interna
<?xml version="1.0"?>
<!DOCTYPE nota [
<!ELEMENT nota (a, da, oggetto, corpo)>
<!ELEMENT a (#PCDATA)>
<!ELEMENT da (#PCDATA)>
<!ELEMENT oggetto (#PCDATA)>
<!ELEMENT corpo (#PCDATA)>
]>
<nota>
<a>Alice</a>
<da>Marco</da>
<oggetto>Promemoria</oggetto>
<corpo>Non dimenticare!</corpo>
</nota>
Dichiarazione
Significato
<!ELEMENT>
Definisce un elemento
#PCDATA
Dati testuali analizzabili
<!ATTLIST>
Definisce gli attributi di un elemento
<!ENTITY>
Definisce un'entità (scorciatoia)
+ * ?
Uno o più / zero o più / opzionale
DTD esterna
<!-- Nel file XML -->
<!DOCTYPE nota SYSTEM "nota.dtd">
<!-- Nel file nota.dtd -->
<!ELEMENT nota (a, da, oggetto, corpo)>
<!ELEMENT a (#PCDATA)>
⚠️ Le DTD hanno limiti: non supportano i tipi di dato (numeri, date) né i namespace. Per questo è nato XSD.
XSD — XML Schema
Un XSD (XML Schema Definition) è l'alternativa moderna alla DTD: definisce la struttura di un documento XML ma con il grande vantaggio dei tipi di dato e del supporto ai namespace. Ed è scritto in XML.
💡 Collegare uno schema: nell'elemento radice si usa xmlns:xsi e xsi:noNamespaceSchemaLocation="nota.xsd".
Web Services, RSS e SOAP
XML è il formato di scambio di molte tecnologie web. Vediamo le principali applicazioni reali.
RSS — feed di notizie
I feed RSS distribuiscono aggiornamenti di blog e siti di notizie in formato XML standardizzato.
Un feed RSS
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Blog di AlessandroSimone.it</title>
<link>https://alessandrosimone.it/</link>
<description>Corsi di programmazione gratuiti</description>
<item>
<title>Nuovo corso XML</title>
<link>https://.../corso-xml.html</link>
<description>Impara XML da zero in italiano</description>
</item>
</channel>
</rss>
SOAP — messaggi fra applicazioni
SOAP (Simple Object Access Protocol) è un protocollo basato su XML per scambiare messaggi strutturati fra applicazioni, tipicamente su HTTP.
Dato il catalogo dell'esercizio 1, scrivi le espressioni XPath per: (a) tutti i nomi dei prodotti; (b) i prodotti di categoria "libri"; (c) i prodotti con prezzo maggiore di 20.
Scrivi una DTD interna che imponga: un elemento radice catalogo contenente uno o più prodotto, ognuno con nome e prezzo.
Soluzione esercizio 3
<!DOCTYPE catalogo [
<!ELEMENT catalogo (prodotto+)>
<!ELEMENT prodotto (nome, prezzo)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT prezzo (#PCDATA)>
<!ATTLIST prodotto categoria CDATA #IMPLIED>
]>
⭐ Il + dopo prodotto significa "uno o più". Usa * per "zero o più" e ? per "opzionale".
E ora?
Complimenti! Hai completato il corso su XML. Ora conosci la sintassi, gli elementi e gli attributi, i namespace, e sai navigare, trasformare e validare i documenti XML con XPath, XSLT, DTD e XSD.
Cosa hai imparato:
Sintassi e regole dei documenti ben formati
Elementi, attributi e namespace
Visualizzare XML con CSS e XSLT
Leggere XML da JavaScript con XHR, DOMParser, DOM e AJAX
Navigare con XPath e interrogare con XQuery
Validare con DTD e XML Schema (XSD)
Applicazioni reali: RSS, SOAP, SVG, sitemap
Il passo successivo? Approfondisci il formato JSON (oggi spesso preferito a XML per le API web) e scopri come consumare dati con JavaScript e Node.js.