XML Formatter
Naformátujte a zkrášlete XML se zvýrazněním syntaxe
XML Vstup
Naformátované XML
Co je formátování XML?
Formátování XML (také nazývané zkrášlování nebo odsazování XML) je proces přidání konzistentního odsazení a zalomení řádků do XML dokumentu tak, aby byla viditelná jeho hierarchická struktura. Surové XML z API, generátorů konfigurace nebo serializátorů se často dodává jako jediný řádek bez mezer mezi značkami. XML formátovač tento dokument analyzuje do stromové struktury a znovu ho serializuje s předvídatelným odsazením. Výsledek je vizuálně přehledný a snáze srozumitelný, přičemž logický obsah dokumentu zůstává naprosto nezměněn.
Specifikace XML 1.0 (doporučení W3C, páté vydání) definuje přísnou gramatiku, kde každá otevírací značka musí mít odpovídající uzavírací značku nebo být samouzavírací, atributy musí být v uvozovkách a pět znaků (<, >, &, ", ') vyžaduje nahrazení entitami. Formátovač musí tato pravidla respektovat a zároveň vkládat pouze nevýznamné mezery, které nemění informační sadu dokumentu (infoset). Správné pochopení těchto pravidel zajišťuje, že formátování probíhá bezpečně a výsledek lze spolehlivě použít ve všech XML procesorech a parsovacích knihovnách.
Naformátované XML se snáze čte při revizi kódu, snáze porovnává ve správě verzí a snáze ladí, když služba vrátí neočekávaná data. Samotná operace formátování je bezeztrátová: logický obsah dokumentu zůstává identický, mění se pouze prezentace. Nástroje jako git diff a platformy pro revizi pull requestů zobrazují pouze upravené řádky — konzistentně odsazené XML zajišťuje, že tyto rozdíly odrážejí skutečné změny, nikoli šum z přeformátování. Týmy, které dodržují konzistentní styl formátování, tráví méně času pochopením struktury dokumentu a více času skutečnou prací na funkčnosti.
<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>Proč použít online XML formátovač?
Ruční formátování XML je náchylné k chybám a pomalé, zejména u dokumentů s hlubokým zanořením nebo smíšenými jmennými prostory. Formátovač v prohlížeči vám dá naformátovaný výsledek za méně než sekundu, bez ohledu na velikost souboru. Na rozdíl od desktopových nástrojů nevyžaduje žádnou instalaci, konfiguraci ani přihlášení — stačí otevřít stránku a začít pracovat.
Případy použití XML formátovače
Předdefinované entity XML
XML rezervuje pět znaků pro svou syntaxi. Pokud se tyto znaky vyskytují jako doslovný textový obsah nebo hodnoty atributů, musí být nahrazeny předdefinovanými entitami. Správný formátovač tyto entity při zkrášlování zachovává.
| Znak | Role v XML | Entita |
|---|---|---|
| < | Start of tag | < |
| > | End of tag | > |
| & | Start of entity | & |
| " | Attribute delimiter | " |
| ' | Attribute delimiter | ' |
Srovnání stylů odsazení XML
Neexistuje jediný standard pro odsazení XML. Volba závisí na konvencích vašeho týmu a nástrojích ve vašem pipeline. Zde jsou tři nejčastější styly.
Ukázky kódu: formátování XML programově
Když potřebujete formátovat XML uvnitř skriptu nebo build procesu, každý hlavní programovací jazyk nabízí vestavěnou nebo standardní knihovní volbu. V Pythonu lze použít modul xml.dom.minidom nebo lxml, v Javě je k dispozici javax.xml.transform s IndentingTransformerHandler, v Node.js pak knihovny jako xmldom nebo fast-xml-parser. Níže jsou funkční příklady, které lze přímo zkopírovat.
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