toooly-box

Formattatore XML

Incolla l’XML e ottienilo indentato, oppure trova il tag che lo ha rotto.

elaborazione locale
Formattatore XML
Incolla l’XML
Formattato

Che cos'è un formattatore XML?

Un formattatore XML indenta un documento così da rendere visibile l'annidamento degli elementi, e sa fare anche il contrario, togliendo gli spazi per rendere il file più piccolo. Cambia solo l'impaginazione: elementi, attributi e testo restano identici.

Come funziona

Il formattatore percorre il documento tag per tag e lo reindenta: un livello di rientro per livello di annidamento, un elemento per riga, con i valori brevi tenuti sulla stessa riga dei tag che li racchiudono.

Tiene una pila di ciò che è aperto. Un tag di chiusura che non corrisponde alla cima della pila è l’errore, e il tag che indica è quasi sempre il punto dello sbaglio: molto più utile di un «non ben formato» alla fine del file.

Commenti e sezioni CDATA finiscono con il proprio terminatore e non con la prima parentesi angolare successiva, quindi un > al loro interno non spezza mai il documento nel punto sbagliato.

Che cosa fa un formattatore XML, e cosa vuol dire «ben formato»

L’XML che esce da un sistema è di solito una riga unica, perché gli spazi tra gli elementi non hanno significato e chi lo genera non ha motivo di aggiungerne. Un formattatore rimette quella struttura sullo schermo: un elemento per riga, rientrato in base alla profondità, così la forma del documento si vede a colpo d’occhio.

Per farlo bisogna capire l’annidamento, ed è per questo che lo stesso strumento risponde anche all’altra domanda con cui si arriva: è ben formato? «Ben formato» è il più basso dei due livelli che l’XML prevede. Significa che ogni tag aperto è chiuso, che le chiusure sono nell’ordine giusto, che gli attributi sono tra virgolette e che c’è un solo elemento radice. Non dice nulla su quanto il documento rispetti uno schema: quella è la validità, un controllo diverso e più grande che richiede l’XSD o la DTD.

Le quattro cose che rompono un file XML

  • Un tag non chiuso di gran lunga il più comune, ed è il motivo per cui l’errore punta così spesso alla fine del file: il parser ha continuato a leggere finché il documento non è finito. Qui viene indicato invece il tag rimasto aperto, che è dove guardare.
  • Tag chiusi in ordine sbagliato <b><i>testo</b></i> è accettabile nell’HTML tollerante e non è mai valido in XML. Gli elementi si annidano, non si sovrappongono.
  • Una & o un < non codificati dentro il testo sono markup, non caratteri. Scrivi &amp; e &lt;, oppure metti il testo in una sezione CDATA.
  • Più di un elemento radice un documento XML ne ha esattamente uno. Due elementi di primo livello di solito significano due documenti concatenati: un incidente frequente quando un log viene costruito in append.

Formattare, minificare, e quando serve l’uno o l’altro

Indentare serve a leggere e a confrontare. Un file formattato si confronta riga per riga, quindi una modifica appare come le righe cambiate invece che come un’unica riga enorme che differisce. Formatta entrambi i lati prima di un diff e il confronto diventa utile.

Minificare serve a spedire. Gli spazi tra gli elementi in XML non sono significativi, quindi toglierli non perde nulla della struttura e può alleggerire sensibilmente una busta SOAP o un feed RSS. L’unica cautela riguarda il contenuto misto, elementi che contengono sia testo sia figli, come in XHTML, dove gli spazi tra le parole stanno dentro il testo e devono sopravvivere: questo strumento tocca solo gli spazi tra i tag, mai quelli dentro il testo.

XML accanto a JSON

I due formati rispondono a domande diverse, e un file nell’uno è raramente un file pulito nell’altro. L’XML ha attributi, namespace, commenti, istruzioni di elaborazione, contenuto misto e un linguaggio di schema; il JSON ha oggetti, array e quattro tipi scalari. Convertire XML in JSON costringe a una decisione su ognuna di quelle caratteristiche: un attributo diventa una chiave con la @ davanti? che ne è di un namespace? un singolo figlio è un oggetto o un array di uno?, e convertitori diversi decidono diversamente: è per questo che un giro di andata e ritorno attraverso il JSON raramente restituisce l’XML di partenza.

Oggi l’XML lo si incontra dove c’era prima del JSON o dove serve ciò che al JSON manca: servizi SOAP, feed RSS e Atom, sitemap, layout Android, configurazioni Maven e Spring, documenti Office, SVG. Quasi tutti hanno uno schema, che è esattamente la cosa che l’XML ha e il JSON in gran parte no.

Controllare un file che non dovresti caricare

Tutto avviene nella pagina. Non viene inviato niente a un server, quindi una risposta SOAP con i dati dei clienti, un file di configurazione con una stringa di connessione o un export da un sistema di produzione si possono formattare senza che nulla lasci il tuo computer, e lo strumento continua a funzionare anche con la rete staccata.

È la differenza che per l’XML conta in modo particolare, perché l’XML è dove vivono le integrazioni vecchie, e le integrazioni vecchie sono dove stanno i payload sensibili. Un formattatore online che invia a un backend ha già ricevuto il documento, e quello che registra se lo tiene.

Domande frequenti

Perché l’errore XML punta all’ultima riga?

Perché un tag più sopra non è mai stato chiuso e il parser ha continuato a leggere fino a esaurire il documento. Questo strumento indica invece il tag rimasto aperto, che è dove sta davvero l’errore.

Il mio XML viene caricato?

No. La formattazione avviene nel browser, non viene inviato niente e lo strumento funziona anche offline. Puoi incollare in sicurezza una risposta SOAP di produzione.

Che differenza c’è tra ben formato e valido?

Ben formato significa che la sintassi regge: tag chiusi, annidamento corretto, una sola radice. Valido significa che rispetta anche uno schema, cioè gli elementi giusti nell’ordine giusto con i tipi giusti. Qui si controlla il primo; il secondo richiede il tuo XSD o la tua DTD.

Minificare cambia i miei dati?

No. Toglie solo gli spazi tra i tag, che in XML non sono significativi. Il testo dentro un elemento resta esattamente com’è, quindi il contenuto misto sopravvive.

Posso convertire l’XML in JSON?

Non qui, ed è voluto: attributi, namespace e contenuto misto non hanno una sola risposta giusta in JSON, quindi ogni convertitore sceglie diversamente e un giro completo raramente restituisce ciò da cui eri partito.