Un formattatore e validatore XML che resta nel browser
XML serve a scambiare dati strutturati: feed RSS, sitemap, fatture elettroniche, file di configurazione, esportazioni dei gestionali. Spesso questi file arrivano su una sola riga, oppure con un tag chiuso male che blocca l'importazione. Questo strumento verifica che il documento sia ben formato, lo formatta o lo compatta, lo mostra ad albero e lo converte in JSON.
Incolla il testo in «Il tuo XML», trascina un file nel riquadro o fai clic su «Apri un file». Il controllo avviene a ogni modifica: compare «XML ben formato.» oppure un messaggio con riga, colonna e causa, insieme a un estratto con il carattere sbagliato evidenziato. «Vai all'errore» porta il cursore proprio lì.
Come si usa
- Scegli il «Risultato»: «Formatta», «Minifica», «XML → JSON» o «JSON → XML».
- Imposta il «Rientro» (2 spazi, 4 spazi o tabulazione), la posizione degli «Attributi» (Sulla riga del tag o Uno per riga) e seleziona o meno «Conserva i commenti».
- Passa ad «Albero» per espandere gli elementi. Un clic su un tag o su un attributo mostra il suo percorso XPath, per esempio
/catalog/product[2]/@ref, che «Copia il percorso» mette negli appunti. La ricerca scorre tag, attributi e testi. - Fai clic su «Copia» o «Scarica».
Ben formato o valido?
Un documento ben formato rispetta la sintassi XML; un documento valido rispetta anche uno schema (DTD o XSD) che stabilisce i tag ammessi. Questo strumento controlla la buona formazione, non la conformità a uno schema. Le regole sono poche: un solo elemento radice, ogni tag chiuso nell'ordine inverso di apertura, valori degli attributi tra virgolette, nomi sensibili alle maiuscole, caratteri & e < codificati nel testo.
| Scritto | Problema | Corretto |
|---|---|---|
<a><b></a></b> | tag incrociati | <a><b></b></a> |
<a id=1/> | valore senza virgolette | <a id="1"/> |
<a>R&S</a> | & non codificato | <a>R&S</a> |
<a> </a> | entità HTML sconosciuta in XML | <a> </a> |
<Prezzo>9</prezzo> | maiuscole diverse | <prezzo>9</prezzo> |
Esempio: con <ordine> alla riga 1, <articolo>Penna alla riga 2 (rientrato di due spazi) e </ordine> alla riga 3, lo strumento segnala «riga 3, colonna 1: trovato </ordine> mentre <articolo>, aperto alla riga 2, colonna 3, è ancora aperto». Poi il DOMParser del browser controlla lo stesso testo; se trova un altro difetto, il suo messaggio compare con riga e colonna.
CDATA, namespace ed entità
Una sezione <![CDATA[ … ]]> contiene testo grezzo in cui < e & non vanno codificati. Il suo contenuto viene ricopiato così com'è, sia nella formattazione sia nella minificazione. Lo stesso vale per il testo di un elemento, per il contenuto misto (testo e tag mescolati) e per ogni elemento con xml:space="preserve": cambiano solo gli spazi tra i tag.
Un prefisso come p:price va dichiarato con xmlns:p="…" sull'elemento o su un genitore, altrimenti lo strumento lo segnala. Senza DTD esistono solo cinque entità con nome: &, <, >, " e ', oltre ai riferimenti numerici come è. Le entità esterne non vengono mai caricate: il DOMParser del browser non scarica alcun file né indirizzo dichiarato in un DOCTYPE, il che esclude gli attacchi XXE.
Convertire XML in JSON e viceversa
La conversione segue una convenzione semplice: attributi con il prefisso @, testo con #text, CDATA con #cdata, elementi ripetuti raccolti in un array e valori sempre come stringhe. Così <articolo cod="X1" qta="2">Penna</articolo> diventa {"articolo":{"@cod":"X1","@qta":"2","#text":"Penna"}}, e la conversione inversa restituisce lo stesso tag. I commenti e l'ordine tra tag con nomi diversi non vengono conservati.
Domande frequenti
Un file da 20 MB blocca la pagina?
No. La formattazione avviene in background; solo il controllo del browser tiene occupata la pagina per un attimo. Oltre i 2 MB il file non viene copiato nel riquadro di inserimento ed è mostrato solo l'inizio del risultato, ma «Copia» e «Scarica» comprendono tutto.
Perché il mio XPath non trova nulla nel programma?
Di solito per colpa di un namespace predefinito (xmlns="…"): quasi tutte le librerie richiedono allora un prefisso dichiarato nel codice.
La formattazione modifica i miei dati?
No. Gli spazi tra i tag vengono riscritti e quelli all'interno dei tag uniformati, ma testi, valori degli attributi e virgolette restano identici. Un elemento che contiene solo spazi diventa vuoto.