HTML CSS JAVASCRIPT SQL MYSQL PYTHON JAVA PHP C C++ C# PACKET TRACER CYBERSECURITY REACT TYPESCRIPT NODE.JS GIT & GITHUB DATA SCIENCE BOOTSTRAP GO KOTLIN JQUERY DJANGO VUE ANGULAR MONGODB POSTGRESQL SASS NUMPY PANDAS SCIPY DSA RUST SWIFT BASH XML WORD POWERPOINT
Corso gratuito

Corso XML in italiano

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.

CaratteristicaDescrizione
EstensibileDefinisci tu i tag in base ai tuoi dati
Auto-descrittivoI nomi dei tag spiegano il contenuto
IndipendenteDa software e hardware: solo testo
GerarchicoI dati sono organizzati ad albero
Standard W3CRaccomandazione 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

XMLHTML
Trasporta datiMostra dati
Tag definiti dall'utenteTag predefiniti
Rigido sulla sintassiTollerante agli errori
Case-sensitiveNon 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.

Una lista di libri in XML
<?xml version="1.0" encoding="UTF-8"?>
<libreria>
  <libro categoria="programmazione">
    <titolo lingua="it">Imparare XML</titolo>
    <autore>Alessandro Simone</autore>
    <anno>2026</anno>
    <prezzo>0.00</prezzo>
  </libro>
  <libro categoria="web">
    <titolo lingua="it">HTML e CSS</titolo>
    <autore>Alessandro Simone</autore>
    <anno>2025</anno>
    <prezzo>0.00</prezzo>
  </libro>
</libreria>
⭐ 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.

Struttura gerarchica
<?xml version="1.0" encoding="UTF-8"?>
<scuola>                       <!-- radice -->
  <classe nome="3A">           <!-- figlio -->
    <studente>                 <!-- nipote -->
      <nome>Luca</nome>
      <eta>17</eta>
    </studente>
    <studente>
      <nome>Sara</nome>
      <eta>16</eta>
    </studente>
  </classe>
</scuola>
  • <scuola> è l'elemento radice (uno solo per documento)
  • <classe> è figlio di scuola
  • I due <studente> sono fratelli (siblings)
  • <nome> ed <eta> sono figli di studente
💡 Ogni documento XML deve avere un solo elemento radice che contiene tutti gli altri.

Le regole della sintassi XML

La sintassi XML è semplice ma rigorosa: un documento che rispetta tutte le regole si dice ben formato (well-formed).

1. Il prologo

La prima riga (opzionale ma consigliata) dichiara versione e codifica:

Dichiarazione XML
<?xml version="1.0" encoding="UTF-8"?>

2. Tutti i tag vanno chiusi

Apertura e chiusura
<p>Questo paragrafo è chiuso correttamente.</p>
<salto/>   <!-- elemento vuoto: auto-chiuso -->

3. I tag sono case-sensitive

Maiuscole e minuscole contano
<!-- ERRATO: apertura e chiusura diverse -->
<Nome>Luca</nome>

<!-- CORRETTO -->
<nome>Luca</nome>

4. Annidamento corretto

Nesting
<!-- ERRATO -->
<b><i>testo</b></i>

<!-- CORRETTO -->
<b><i>testo</i></b>

5. Gli attributi vanno fra virgolette

Attributi quotati
<nota data="2026-06-13">Ciao</nota>

6. Caratteri speciali (entità)

EntitàCarattere
&lt;< (minore)
&gt;> (maggiore)
&amp;& (e commerciale)
&apos;' (apice)
&quot;" (virgolette)
Uso delle entità
<confronto>5 &lt; 10 &amp;&amp; 10 &gt; 5</confronto>

7. I commenti

Commento XML
<!-- Questo è un commento, identico a quello HTML -->
⚠️ Un solo errore di sintassi rende il documento non ben formato: i parser XML si rifiutano di elaborarlo (a differenza dei browser con l'HTML).

Gli elementi XML

Un elemento è tutto ciò che va dal tag di apertura al tag di chiusura. Può contenere testo, altri elementi, attributi o essere vuoto.

Tipi di contenuto
<libro>                          <!-- contiene elementi -->
  <titolo>XML facile</titolo>    <!-- contiene testo -->
  <copertina src="img.png"/>     <!-- vuoto, con attributo -->
  <prezzo valuta="EUR">0</prezzo><!-- testo + attributo -->
</libro>

Regole per i nomi degli elementi

  • 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).

Attributi multipli
<persona genere="F" eta="16">
  <nome>Sara</nome>
</persona>

<immagine src="foto.jpg" alt="Una foto" larghezza="300"/>
💡 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>

Risolvere con i prefissi e xmlns

Namespace con prefisso
<radice xmlns:a="https://esempio.it/arredo"
        xmlns:h="http://www.w3.org/TR/html4/">

  <a:tabella>
    <a:materiale>legno</a:materiale>
  </a:tabella>

  <h:tabella>
    <h:tr><h:td>A</h:td></h:tr>
  </h:tabella>

</radice>
💡 L'URI di un namespace (es. https://esempio.it/arredo) serve solo a rendere il nome univoco: non deve puntare a una pagina reale.

Namespace di default

xmlns senza prefisso
<tabella xmlns="https://esempio.it/arredo">
  <materiale>legno</materiale>
</tabella>

Visualizzare XML

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:

Collegare un CSS all'XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="nota.css"?>
<nota>
  <a>Alice</a>
  <corpo>Ricordati la lezione!</corpo>
</nota>
Il foglio nota.css
nota { display: block; font-family: sans-serif; }
a    { display: block; font-weight: bold; color: #4f46e5; }
corpo{ display: block; margin-top: .5rem; }
⭐ 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.

Caricare un file XML con XHR
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
  if (this.readyState === 4 && this.status === 200) {
    const xml = this.responseXML;
    const titoli = xml.getElementsByTagName("titolo");
    console.log(titoli[0].textContent);
  }
};
xhr.open("GET", "libreria.xml", true);
xhr.send();
ProprietàSignificato
readyStateStato della richiesta (4 = completata)
statusCodice HTTP (200 = OK, 404 = non trovato)
responseXMLLa risposta come documento XML
responseTextLa risposta come testo
💡 Oggi nel codice moderno si usa spesso fetch() con le Promise, ma XMLHttpRequest è ancora ampiamente supportato e utile da conoscere.

Il parser XML

I browser includono un parser XML che converte il testo XML in un oggetto DOM navigabile da JavaScript. Si usa DOMParser.

Da stringa a DOM con DOMParser
const testo = `
<nota>
  <a>Alice</a>
  <corpo>Ciao!</corpo>
</nota>`;

const parser = new DOMParser();
const xmlDoc = parser.parseFromString(testo, "text/xml");

console.log(xmlDoc.getElementsByTagName("a")[0].textContent); // Alice

Serializzare: dal DOM al testo

XMLSerializer
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
parentNodeIl nodo padre
childNodesI nodi figli
textContentIl 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

  1. Un evento accade nella pagina (clic, caricamento...)
  2. JavaScript crea una richiesta (XHR o fetch)
  3. La richiesta parte verso il server in modo asincrono
  4. Il server elabora e risponde (XML, JSON, testo)
  5. 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.

EspressioneSeleziona
/libreria/libroTutti i libro figli di libreria (dalla radice)
//titoloTutti 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
@categoriaL'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
XPath da JavaScript
const risultato = xmlDoc.evaluate(
  "//titolo",
  xmlDoc,
  null,
  XPathResult.ANY_TYPE,
  null
);
let nodo = risultato.iterateNext();
while (nodo) {
  console.log(nodo.textContent);
  nodo = risultato.iterateNext();
}

XSLT

XSLT (eXtensible Stylesheet Language Transformations) trasforma documenti XML in altri formati: HTML, testo o altro XML. Usa XPath per selezionare le parti da trasformare.

Foglio XSLT che genera una tabella HTML
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <html><body>
      <h2>La mia libreria</h2>
      <table border="1">
        <tr><th>Titolo</th><th>Autore</th></tr>
        <xsl:for-each select="libreria/libro">
          <tr>
            <td><xsl:value-of select="titolo"/></td>
            <td><xsl:value-of select="autore"/></td>
          </tr>
        </xsl:for-each>
      </table>
    </body></html>
  </xsl:template>

</xsl:stylesheet>

Collegare l'XSLT all'XML

xml-stylesheet con XSLT
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="libreria.xsl"?>
<libreria>
  <libro><titolo>XML</titolo><autore>Simone</autore></libro>
</libreria>
Elemento XSLTFunzione
<xsl:template>Definisce una regola di trasformazione
<xsl:value-of>Estrae il valore di un nodo
<xsl:for-each>Cicla su un insieme di nodi
<xsl:sort>Ordina i nodi
<xsl:if>Esegue se la condizione è vera
<xsl:choose>Selezione multipla (if/else)

XQuery

XQuery è il linguaggio per interrogare dati XML, come SQL lo è per i database relazionali. È costruito su XPath e usa le espressioni FLWOR.

ClausolaSignificato
ForItera su una sequenza di nodi
LetAssegna una variabile
WhereFiltra i risultati
Order byOrdina i risultati
ReturnCostruisce 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>
DichiarazioneSignificato
<!ELEMENT>Definisce un elemento
#PCDATADati 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.

Uno schema XSD
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="nota">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="a" type="xs:string"/>
        <xs:element name="da" type="xs:string"/>
        <xs:element name="oggetto" type="xs:string"/>
        <xs:element name="corpo" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>
Tipo XSDEsempio
xs:stringTesto: "Ciao"
xs:integerIntero: 42
xs:decimalDecimale: 9.99
xs:booleantrue / false
xs:date2026-06-13

Restrizioni (facet)

Vincolare i valori
<xs:element name="eta">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="120"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>
💡 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.

Un messaggio SOAP
<?xml version="1.0"?>
<soap:Envelope
  xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <getPrezzo>
      <articolo>Libro XML</articolo>
    </getPrezzo>
  </soap:Body>
</soap:Envelope>
⭐ Anche SVG (grafica vettoriale), i documenti Office (.docx) e le sitemap dei siti web sono XML: lo incontri ogni giorno anche senza accorgertene.

Esercizi pratici

Metti alla prova ciò che hai imparato. Apri l'editor con Provalo tu ▶, leggi il codice e prova a modificarlo seguendo le consegne.

🎯 Esercizio 1 — Crea un catalogo

Scrivi un documento XML ben formato che rappresenti un catalogo di almeno 3 prodotti, ognuno con nome, prezzo e categoria (come attributo).

Soluzione esercizio 1
<?xml version="1.0" encoding="UTF-8"?>
<catalogo>
  <prodotto categoria="elettronica">
    <nome>Cuffie</nome>
    <prezzo>29.90</prezzo>
  </prodotto>
  <prodotto categoria="libri">
    <nome>Corso XML</nome>
    <prezzo>0.00</prezzo>
  </prodotto>
  <prodotto categoria="casa">
    <nome>Lampada</nome>
    <prezzo>15.00</prezzo>
  </prodotto>
</catalogo>
🎯 Esercizio 2 — XPath

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.

Soluzione esercizio 2
(a)  //prodotto/nome
(b)  //prodotto[@categoria='libri']
(c)  //prodotto[prezzo > 20]
🎯 Esercizio 3 — Validazione

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.

Vai al corso JavaScript →Torna ai Corsi📅 Prenota una lezione