XML Formatter
Format dan cetak XML dengan indentasi rapi dan sorotan sintaks
Input XML
XML Terformat
Apa itu Pemformatan XML?
Pemformatan XML (disebut juga pretty-printing XML atau beautifikasi XML) adalah proses menambahkan indentasi dan jeda baris yang konsisten ke dokumen XML agar struktur hierarkinya menjadi terlihat. XML mentah dari API, generator konfigurasi, atau serializer sering dikirimkan sebagai satu baris tanpa spasi di antara tag. Sebuah XML formatter mengurai dokumen tersebut menjadi pohon, lalu menyusunnya kembali dengan spasi yang teratur. Hasilnya jauh lebih mudah dibaca dan dipahami oleh pengembang mana pun, tanpa mengubah konten logis dokumen sama sekali.
Spesifikasi XML 1.0 (Rekomendasi W3C, edisi kelima) mendefinisikan tata bahasa ketat di mana setiap tag pembuka harus memiliki tag penutup yang sesuai atau bersifat self-closing, atribut harus dikutip, dan lima karakter (<, >, &, ", ') memerlukan escaping entitas. Sebuah formatter harus mematuhi aturan ini sambil hanya menyisipkan spasi tidak signifikan yang tidak mengubah kumpulan informasi (infoset) dokumen. Pemahaman aturan ini sangat penting agar hasil pemformatan tetap valid dan dapat diproses oleh semua parser XML yang sesuai standar.
XML yang telah diformat lebih mudah dibaca saat code review, lebih mudah dibandingkan dalam version control, dan lebih mudah di-debug saat suatu layanan mengembalikan data yang tidak terduga. Operasi pemformatan itu sendiri bersifat lossless: konten logis dokumen tetap identik, hanya tampilannya yang berubah. Alat seperti git diff dan platform review pull request hanya menampilkan baris yang dimodifikasi — XML dengan indentasi yang konsisten memastikan diff tersebut mencerminkan perubahan nyata, bukan sekadar kebisingan reformatting.
<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>Mengapa Menggunakan XML Formatter Online?
Memformat XML secara manual rentan terhadap kesalahan dan lambat, terutama untuk dokumen dengan nesting dalam atau namespace campuran. Sebuah formatter berbasis browser memberikan hasil yang terformat dalam waktu kurang dari satu detik, terlepas dari ukuran file. Tidak seperti alat desktop atau utilitas baris perintah, formatter ini tidak memerlukan instalasi atau konfigurasi apapun — cukup buka halaman dan langsung mulai bekerja.
Kasus Penggunaan XML Formatter
Referensi Entitas Bawaan XML
XML mereservasi lima karakter untuk sintaksnya. Ketika karakter-karakter ini muncul sebagai konten teks literal atau nilai atribut, karakter tersebut harus diganti dengan referensi entitas bawaan. Sebuah formatter yang benar mempertahankan entitas-entitas ini selama pretty-printing.
| Karakter | Peran dalam XML | Entitas |
|---|---|---|
| < | Start of tag | < |
| > | End of tag | > |
| & | Start of entity | & |
| " | Attribute delimiter | " |
| ' | Attribute delimiter | ' |
Perbandingan Gaya Indentasi XML
Tidak ada standar tunggal untuk indentasi XML. Pilihan bergantung pada konvensi tim Anda dan alat dalam pipeline Anda. Berikut adalah tiga gaya yang paling umum.
Contoh Kode: Format XML Secara Programatik
Ketika Anda perlu memformat XML di dalam skrip atau proses build, setiap bahasa utama memiliki opsi bawaan atau dari pustaka standar. Berikut adalah contoh yang dapat Anda salin langsung.
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