XML Formatter
Formatera och pretty-printa XML med syntaxmarkering
XML-indata
Formaterad XML
Vad är XML-formatering?
XML-formatering (även kallad XML pretty-printing eller XML-försköning) är processen att lägga till konsekvent indragning och radbrytningar i ett XML-dokument så att dess hierarkiska struktur blir synlig. Rå XML från API:er, konfigurationsgeneratorer eller serialiserare levereras ofta som en enda rad utan blanksteg mellan taggar. En XML-formaterare parsar dokumentet till ett träd och serialiserar det sedan om med förutsägbara avstånd. Resultatet är visuellt klart och mycket lättare att förstå, utan att dokumentets logiska innehåll förändras på något sätt. Det är en snabb och enkel åtgärd som sparar avsevärd tid vid felsökning och kodgranskning.
XML 1.0-specifikationen (W3C Recommendation, femte upplagan) definierar en strikt grammatik där varje öppningstagg måste ha en matchande stängningstagg eller vara självstängande, attribut måste vara citerade och fem tecken (<, >, &, ", ') kräver entitetskodning. En formaterare måste respektera dessa regler och samtidigt bara infoga insignifikant blanksteg som inte förändrar dokumentets informationsmängd (infoset). En korrekt förståelse av dessa regler garanterar att det formaterade XML-dokumentet förblir giltigt och kan bearbetas av alla regelrätta XML-processorer och parsningsbibliotek.
Formaterad XML är enklare att läsa vid kodgranskning, enklare att diff:a i versionshantering och enklare att felsöka när en tjänst returnerar oväntad data. Formateringsoperationen är förlustfri: dokumentets logiska innehåll förblir identiskt — bara presentationen förändras. Verktyg som git diff och pull request-plattformar visar bara ändrade rader — konsekvent indragen XML säkerställer att dessa diff:ar speglar verkliga ändringar, inte omformateringsbrus. Team som konsekvent tillämpar ett gemensamt formateringsstil lägger mindre tid på att förstå dokumentstrukturer och mer tid på faktiskt produktivt arbete med funktionalitet och logik.
<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date></book></catalog>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
</book>
</catalog>Varför använda en online-XML-formaterare?
Att formatera XML för hand är felbenäget och långsamt, särskilt för dokument med djup nästning eller blandade namnrymder. En webbläsarbaserad formaterare ger dig ett formaterat resultat på under en sekund, oavsett filstorlek. Till skillnad från skrivbordsprogram eller kommandoradsverktyg krävs ingen installation eller konfiguration — öppna bara sidan och börja arbeta direkt utan förberedelser.
Användningsfall för XML Formatter
XML-fördefinierad entitetsreferens
XML reserverar fem tecken för sin syntax. När dessa tecken förekommer som bokstavligt textinnehåll eller attributvärden måste de ersättas med fördefinierade entitetsreferenser. En korrekt formaterare bevarar dessa entiteter under pretty-printing.
| Tecken | Roll i XML | Entitet |
|---|---|---|
| < | Start of tag | < |
| > | End of tag | > |
| & | Start of entity | & |
| " | Attribute delimiter | " |
| ' | Attribute delimiter | ' |
XML-indragningsstilar jämförda
Det finns ingen enskild standard för XML-indragning. Valet beror på ditt teams konventioner och verktygen i din pipeline. Här är de tre vanligaste stilarna.
Kodexempel: Formatera XML programmatiskt
När du behöver formatera XML inuti ett skript eller en byggprocess har varje större programspråk ett inbyggt alternativ eller ett alternativ i standardbiblioteket. I Python kan du använda modulen xml.dom.minidom eller lxml, i Java erbjuder javax.xml.transform stöd för snygg utskrift, och i Node.js finns bibliotek som xmldom eller prettier tillgängliga. Nedan finns fungerande exempel du kan kopiera direkt.
const raw = '<root><item>hello</item></root>'
const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')
const serializer = new XMLSerializer()
const xml = serializer.serializeToString(doc)
// Indent with XSLT (browser-native approach)
const xslt = new DOMParser().parseFromString(`
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
</xsl:template>
</xsl:stylesheet>`, 'application/xml')
const proc = new XSLTProcessor()
proc.importStylesheet(xslt)
const formatted = proc.transformToDocument(doc)
console.log(new XMLSerializer().serializeToString(formatted))
// → <root>\n <item>hello</item>\n</root>import xml.dom.minidom raw = '<root><item>hello</item><item>world</item></root>' dom = xml.dom.minidom.parseString(raw) print(dom.toprettyxml(indent=' ')) # → <?xml version="1.0" ?> # → <root> # → <item>hello</item> # → <item>world</item> # → </root> # With lxml (handles namespaces, XSD, large files) from lxml import etree tree = etree.fromstring(raw.encode()) print(etree.tostring(tree, pretty_print=True).decode())
package main
import (
"encoding/xml"
"fmt"
"strings"
)
func formatXML(raw string) (string, error) {
decoder := xml.NewDecoder(strings.NewReader(raw))
var out strings.Builder
encoder := xml.NewEncoder(&out)
encoder.Indent("", " ")
for {
tok, err := decoder.Token()
if err != nil {
break
}
encoder.EncodeToken(tok)
}
encoder.Flush()
return out.String(), nil
}
// formatXML("<a><b>1</b></a>") → "<a>\n <b>1</b>\n</a>"# Format XML file with xmllint (part of libxml2, pre-installed on macOS/Linux) xmllint --format input.xml > formatted.xml # Format from stdin echo '<a><b>1</b></a>' | xmllint --format - # → <?xml version="1.0"?> # → <a> # → <b>1</b> # → </a> # Validate and format at the same time xmllint --format --schema schema.xsd input.xml