Formatarea și indentarea XML
- Panou de control
- Documentație
- API
De ce să formatezi XML?
Formatarea XML (numită și punere în formă XML, indentare XML sau pretty print) constă în reorganizarea unui document XML compact sau minifiat într-o structură indentată, lizibilă linie cu linie. Un XML bine formatat îmbunătățește lizibilitatea umană, ceea ce este indispensabil când trebuie să citești un răspuns SOAP, să parcurgi un flux RSS sau să inspectezi conținutul unui fișier de configurare.
Concret, se formatează XML-ul pentru patru motive principale:
- Debug: a identifica rapid o etichetă neînchisă, un atribut lipsă sau o structură incoerentă.
- Integrare manuală: a copia curat un fragment într-un fișier de configurare fără a sparge indentarea existentă.
- Code review: a compara două versiuni ale unui document XML într-un diff Git devine lizibil când fiecare etichetă este pe propria linie.
- Documentație și exemple: un XML formatat este mult mai pedagogic într-o documentație tehnică sau un README.
Cazuri de utilizare tipice
XML-ul rămâne omniprezent în ecosistemul software. Iată formatele pe care dezvoltatorii utilizează cel mai adesea un formatator XML:
- Răspunsuri SOAP: plicurile
<soap:Envelope>returnate de web service-uri SOAP sosesc în general minifiate. - Fluxuri RSS și Atom: pentru a inspecta sau audita un flux de sindicare.
- Configurări Spring, Maven (
pom.xml), Ant, Ivy: fișiere de build și dependențe Java. AndroidManifest.xmlși alte resurse XML ale unui proiect Android.- Fișiere SVG: un grafic vectorial exportat dintr-un software de design este adesea comprimat pe o singură linie.
- Exporturi e-commerce: fluxuri produse Google Shopping, exporturi Magento, Shopify sau PrestaShop.
- Documente OOXML: fișierele
.docx,.xlsxși.pptxsunt arhive ZIP conținând fișiere XML pe care trebuie adesea să le inspectezi. - Sitemap-uri XML:
sitemap.xml-urile servite motoarelor de căutare.
Cum funcționează formatarea XML
Un formatator XML nu se mulțumește să adauge spații la întâmplare. Efectuează două etape:
- Parsing: documentul este citit apoi transformat într-un arbore DOM (Document Object Model). Această etapă validează de asemenea că XML-ul este bine format (etichete corect imbricate, atribute între ghilimele, un singur element rădăcină).
- Serializare indentată: arborele DOM este re-emis sub formă de text cu salturi de linie între elemente și o indentare proporțională cu adâncimea în arbore.
Această abordare prin arbore garantează că structura logică a documentului rămâne strict identică: doar spațiile nesemnificative între etichete sunt modificate. Secțiunile CDATA, comentariile și instrucțiunile de procesare sunt păstrate. Transformările mai avansate (XSLT) sau interogările (XPath) operează de altfel pe același arbore DOM.
Cum să utilizezi formatatorul XML
Procedura este intenționat simplă:
- Lipește documentul tău XML în zona de text, sau încarcă un fișier
.xml. - Validează formularul: documentul este analizat și indentat automat.
- Rezultatul formatat apare în zona de ieșire. În caz de eroare de parsing, un mesaj indică natura și poziția aproximativă a problemei.
- Copiază rezultatul cu butonul dedicat, sau descarcă-l pentru a-l integra direct în proiectul tău.
Bune practici de indentare XML
Câteva convenții de respectat pentru a produce un XML curat și durabil:
- Indentare: 2 sau 4 spații în funcție de convenția echipei tale. Rămâi coerent în tot proiectul.
- Salturi de linie: un element pe linie, ceea ce face diff-urile Git exploatabile.
- Secțiuni CDATA: un bun formatator păstrează integral blocurile
<![CDATA[ ... ]]>fără a reindenta conținutul lor, care este tratat ca text brut. - Codare: declară întotdeauna codarea în prima linie cu
<?xml version="1.0" encoding="UTF-8"?>. UTF-8 este standardul de facto. - Atribute: dacă un element are multe atribute, anumite echipe le trec pe linia următoare pentru lizibilitate; altfel rămân pe aceeași linie cu eticheta deschizătoare.
- Comentarii:
<!-- ... -->trebuie păstrate ca atare de formatator.
Exemplu înainte / după
Iată un exemplu concret al unui XML compact înfrumusețat de formatator.
Înainte (o singură linie, ilizibil):
<root><item id="1">val</item><item id="2">val2</item></root>
După (formatat cu 2 spații):
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="1">val</item>
<item id="2">val2</item>
</root>
Structura logică este strict identică: doar aranjamentul vizual se schimbă.
Exemplu complet
Un document XML mai voluminos după formatare arată astfel:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<user id="12345">
<name>John Doe</name>
<email>johndoe@example.com</email>
<address>
<street>123 Main St</street>
<city>Springfield</city>
<state>IL</state>
<postalCode>62704</postalCode>
<country>USA</country>
</address>
<phoneNumbers>
<phoneNumber type="home">555-1234</phoneNumber>
<phoneNumber type="work">555-5678</phoneNumber>
</phoneNumbers>
<preferences>
<newsletter>true</newsletter>
<theme>dark</theme>
</preferences>
<lastLogin>2024-06-14T09:30:00Z</lastLogin>
</user>
</root>
Întrebări frecvente
Ce este un XML bine format?
Un XML este zis bine format (well-formed) când respectă regulile sintactice de bază: un singur element rădăcină, etichete corect imbricate și închise, atribute între ghilimele, caractere speciale escapate (&, <, >). Este o cerință prealabilă pentru a putea parsa documentul. Nu se confundă cu un XML valid, care în plus respectă o schemă XSD sau o DTD.
Care este diferența între formatare (pretty print) și minificare XML?
Pretty print adaugă salturi de linie și indentare pentru citirea umană. Minificarea face inversul: suprimă toate spațiile nesemnificative pentru a reduce dimensiunea documentului, ceea ce este util pentru tranzitul rețea (răspunsuri SOAP, API XML). Cele două documente sunt echivalente semantic.
Comentariile și secțiunile CDATA sunt păstrate la formatare?
Da. Un formatator corect păstrează comentariile <!-- ... -->, secțiunile <![CDATA[ ... ]]> precum și instrucțiunile de procesare (<? ... ?>). Conținutul unui CDATA rămâne intact fără reindentare, întrucât este tratat ca text brut. Verifică rezultatul dacă comentariile tale au o importanță documentară.
Namespace-urile XML (xmlns) sunt gestionate?
Da. Declarațiile de namespace (xmlns:soap="...") și prefixele asociate (<soap:Envelope>) sunt păstrate ca atare. Formatatorul nu redenumește prefixele și nu deplasează declarațiile în arbore, ceea ce garantează că semantica documentului rămâne identică. Namespace-urile implicite (fără prefix) sunt de asemenea menținute la nivelul lor de declarație.
Trebuie să indentez cu spații sau tab-uri?
Ambele funcționează, dar spațiile sunt convenția dominantă pentru că se afișează identic peste tot (terminale, browsere, diff Git). 2 sau 4 spații în funcție de verbozitatea XML-ului tău: 2 pentru documentele foarte imbricate (SVG, configurări Spring), 4 pentru documentele plate. Esențialul rămâne coerența în tot proiectul.
Formatatorul modifică semantica documentului?
Nu. Doar spațiile albe între etichete sunt ajustate. Structura DOM, valorile atributelor și conținutul textual al elementelor rămân identice. O excepție: conținutul textual semnificativ (cu xml:space="preserve") trebuie păstrat ca atare, verifică acest aspect dacă datele tale conțin spații purtătoare de sens.
Poți valida un XML în același timp cu formatarea?
Formatatorul efectuează deja o validare sintactică (XML bine format) întrucât trebuie să parseze documentul. Pentru o validare contra unei scheme XSD sau a unei DTD, este nevoie de un instrument dedicat: validarea structurală depășește perimetrul unui simplu formatator. xmllint --schema sau xerces convin pentru această etapă suplimentară.
Exemplu de cerere
curl -X POST https://cdrn.fr/api/v1/tools/xml-formatter/execute \
-H "Content-Type: application/json" \
-d '{"input":"..."}'
Schema de intrare
| Câmp | Tip | Obligatoriu | Implicit |
|---|---|---|---|
input |
text | ✓ | – |
Puncte de acces
GET https://cdrn.fr/api/v1/tools- listează toate instrumentele disponibileGET https://cdrn.fr/api/v1/tools/xml-formatter- obține schema acestui instrumentPOST https://cdrn.fr/api/v1/tools/xml-formatter/execute- execută acest instrument cu un payload JSON