Formatera och indentera XML
- Panel
- Dokumentation
- API
Varför formatera XML?
XML-formatering (även kallad XML-layout, XML-indentering eller pretty print) består i att omorganisera ett kompakt eller minifierat XML-dokument till en indenterad, läsbar struktur rad för rad. En välformaterad XML förbättrar mänsklig läsbarhet, vilket är oumbärligt när man ska läsa ett SOAP-svar, bläddra i ett RSS-flöde eller inspektera innehållet i en konfigurationsfil.
Konkret formaterar man XML av fyra huvudskäl:
- Debug: snabbt hitta en oavslutad tagg, ett saknat attribut eller en inkonsekvent struktur.
- Manuell integration: prydligt kopiera ett fragment till en konfigurationsfil utan att förstöra befintlig indentering.
- Kodgranskning: jämföra två versioner av ett XML-dokument i en Git-diff blir läsbart när varje tagg står på sin egen rad.
- Dokumentation och exempel: en formaterad XML är mycket mer pedagogisk i teknisk dokumentation eller en README.
Typiska användningsfall
XML är fortfarande allestädes närvarande i mjukvaruekosystemet. Här är de format där utvecklare oftast använder en XML-formaterare:
- SOAP-svar:
<soap:Envelope>-kuverten som returneras av SOAP-webbtjänster anländer i allmänhet minifierade. - RSS- och Atom-flöden: för att inspektera eller granska ett syndikeringsflöde.
- Spring-, Maven- (
pom.xml), Ant-, Ivy-konfigurationer: bygg- och beroendefiler för Java. AndroidManifest.xmloch andra XML-resurser i ett Android-projekt.- SVG-filer: en vektorgrafik exporterad från ett designprogram är ofta komprimerad till en enda rad.
- E-handelsexporter: produktflöden för Google Shopping, exporter från Magento, Shopify eller PrestaShop.
- OOXML-dokument:
.docx-,.xlsx- och.pptx-filer är ZIP-arkiv som innehåller XML-filer som ofta behöver inspekteras. - XML-sitemaps:
sitemap.xmlsom serveras till sökmotorer.
Hur XML-formatering fungerar
En XML-formaterare nöjer sig inte med att lägga till mellanslag på måfå. Den utför två steg:
- Parsing: dokumentet läses och omvandlas till ett DOM-träd (Document Object Model). Det här steget validerar också att XML:en är välformad (korrekt kapslade taggar, attribut inom citattecken, ett enda rotelement).
- Indenterad serialisering: DOM-trädet skrivs ut igen som text med radbrytningar mellan element och en indentering proportionell mot djupet i trädet.
Det här trädbaserade tillvägagångssättet garanterar att dokumentets logiska struktur förblir strikt identisk: endast icke-signifikanta mellanslag mellan taggar ändras. CDATA-sektioner, kommentarer och bearbetningsinstruktioner bevaras. Mer avancerade transformationer (XSLT) eller förfrågningar (XPath) opererar för övrigt på samma DOM-träd.
Så använder du XML-formateraren
Proceduren är medvetet enkel:
- Klistra in ditt XML-dokument i textrutan eller ladda upp en
.xml-fil. - Skicka in formuläret: dokumentet analyseras och indenteras automatiskt.
- Det formaterade resultatet visas i utdataområdet. Vid parsingfel anger ett meddelande problemets art och ungefärliga position.
- Kopiera resultatet med den dedikerade knappen, eller ladda ner det för att integrera direkt i ditt projekt.
Bästa praxis för XML-indentering
Några konventioner att följa för att producera ren och hållbar XML:
- Indentering: 2 eller 4 mellanslag beroende på teamets konvention. Var konsekvent i hela projektet.
- Radbrytningar: ett element per rad, vilket gör Git-diffar användbara.
- CDATA-sektioner: en bra formaterare bevarar
<![CDATA[ ... ]]>-block intakt utan att indentera om deras innehåll, som behandlas som rå text. - Kodning: deklarera alltid kodningen på första raden med
<?xml version="1.0" encoding="UTF-8"?>. UTF-8 är de facto standarden. - Attribut: om ett element har många attribut sätter vissa team dem på egna rader för läsbarhet; annars stannar de på samma rad som öppningstaggen.
- Kommentarer:
<!-- ... -->ska bevaras som de är av formateraren.
Före- och efterexempel
Här är ett konkret exempel på en kompakt XML försköndad av formateraren.
Före (en enda rad, oläslig):
<root><item id="1">val</item><item id="2">val2</item></root>
Efter (formaterad med 2 mellanslag):
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="1">val</item>
<item id="2">val2</item>
</root>
Den logiska strukturen är strikt identisk: bara den visuella layouten ändras.
Fullständigt exempel
Ett större XML-dokument efter formatering ser ut så här:
<?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>
Vanliga frågor
Vad är en välformad XML?
En XML kallas välformad (well-formed) när den följer de grundläggande syntaxreglerna: ett enda rotelement, korrekt kapslade och stängda taggar, attribut inom citattecken, escapade specialtecken (&, <, >). Det är ett krav för att kunna parsa dokumentet. Inte att förväxla med en giltig XML, som dessutom följer ett XSD-schema eller en DTD.
Vad är skillnaden mellan formatering (pretty print) och XML-minifiering?
Pretty print lägger till radbrytningar och indentering för mänsklig läsning. Minifiering gör tvärtom: den tar bort alla icke-signifikanta mellanslag för att minska dokumentstorleken, vilket är användbart för nätverkstransport (SOAP-svar, XML-API). De två dokumenten är semantiskt likvärdiga.
Bevaras kommentarer och CDATA-sektioner vid formatering?
Ja. En korrekt formaterare bevarar kommentarer <!-- ... -->, sektionerna <![CDATA[ ... ]]> samt bearbetningsinstruktioner (<? ... ?>). Innehållet i en CDATA förblir intakt utan ny indentering, eftersom det behandlas som rå text. Verifiera resultatet om dina kommentarer har dokumentärt värde.
Hanteras XML-namespaces (xmlns)?
Ja. Namespace-deklarationer (xmlns:soap="...") och tillhörande prefix (<soap:Envelope>) bevaras som de är. Formateraren byter inte namn på prefix och flyttar inte deklarationer i trädet, vilket säkerställer att dokumentets semantik förblir identisk. Standardnamespaces (utan prefix) behålls också på sin deklarationsnivå.
Ska man indentera med mellanslag eller tabbar?
Båda fungerar, men mellanslag är den dominerande konventionen eftersom de visas identiskt överallt (terminaler, webbläsare, Git-diff). 2 eller 4 mellanslag beroende på XML:ens omfång: 2 för mycket kapslade dokument (SVG, Spring-konfigurationer), 4 för plattare dokument. Det viktigaste är konsekvens i hela projektet.
Ändrar formateraren dokumentets semantik?
Nej. Endast blanksteg mellan taggar justeras. DOM-strukturen, attributvärden och elementens textinnehåll förblir identiska. Ett undantag: signifikant textinnehåll (med xml:space="preserve") ska bevaras som det är, kontrollera den aspekten om dina data innehåller meningsbärande mellanslag.
Kan man validera en XML samtidigt som den formateras?
Formateraren utför redan en syntaktisk validering (välformad XML) eftersom den måste parsa dokumentet. För validering mot ett XSD-schema eller en DTD behövs ett dedikerat verktyg: strukturell validering går utöver en enkel formaterares omfattning. xmllint --schema eller xerces passar för detta extrasteg.
Exempelförfrågan
curl -X POST https://cdrn.fr/api/v1/tools/xml-formatter/execute \
-H "Content-Type: application/json" \
-d '{"input":"..."}'
Indatasschema
| Fält | Typ | Obligatorisk | Standard |
|---|---|---|---|
input |
text | ✓ | – |
Slutpunkter
GET https://cdrn.fr/api/v1/tools- listar alla tillgängliga verktygGET https://cdrn.fr/api/v1/tools/xml-formatter- hämtar schemat för detta verktygPOST https://cdrn.fr/api/v1/tools/xml-formatter/execute- kör detta verktyg med en JSON-payload