Formater XML

Formatuj i upiększaj XML z podświetlaniem składni

Wypróbuj przykład

Wejście XML

Sformatowany XML

Działa lokalnie · Bezpieczne do wklejania sekretów
Sformatowany XML pojawi się tutaj…

Czym jest formatowanie XML?

Formatowanie XML (nazywane też upiększaniem lub czytelnym wydrukiem XML) to proces dodawania spójnych wcięć i podziałów wierszy do dokumentu XML, dzięki czemu jego hierarchiczna struktura staje się widoczna. Surowy XML z API, generatorów konfiguracji lub serializatorów jest często dostarczany jako pojedyncza linia bez białych znaków między tagami. Formater XML parsuje taki dokument w drzewo, a następnie ponownie go serializuje z przewidywalnym odstępem. Wynik jest przejrzysty wizualnie i znacznie łatwiejszy do zrozumienia, bez żadnych zmian w logicznej treści dokumentu.

Specyfikacja XML 1.0 (zalecenie W3C, wydanie piąte) definiuje ścisłą gramatykę, w której każdy otwierający tag musi mieć pasujący tag zamykający lub być samozamykający, atrybuty muszą być ujęte w cudzysłowy, a pięć znaków (<, >, &, ", ') wymaga zastąpienia encjami. Formater musi przestrzegać tych zasad, wstawiając jedynie nieistotne białe znaki, które nie zmieniają zbioru informacji dokumentu (infoset). Rozumienie tych zasad jest kluczowe, aby mieć pewność, że sformatowany XML pozostaje poprawny i może być przetwarzany przez wszystkie zgodne parsery XML.

Sformatowany XML jest łatwiejszy do czytania podczas przeglądu kodu, łatwiejszy do porównywania w systemie kontroli wersji i łatwiejszy do debugowania, gdy serwis zwraca nieoczekiwane dane. Sama operacja formatowania jest bezstratna: logiczna zawartość dokumentu pozostaje identyczna, zmienia się tylko prezentacja. Narzędzia takie jak git diff i platformy do przeglądu kodu pokazują tylko zmodyfikowane wiersze — spójnie wcięty XML zapewnia, że te różnice odzwierciedlają rzeczywiste zmiany, a nie szum reformatowania.

Before · xml
After · xml
<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>

Dlaczego warto używać internetowego formatera XML?

Ręczne formatowanie XML jest podatne na błędy i powolne, zwłaszcza w przypadku dokumentów z głębokim zagnieżdżeniem lub mieszanymi przestrzeniami nazw. Formater działający w przeglądarce daje sformatowany wynik w mniej niż sekundę, niezależnie od rozmiaru pliku. W przeciwieństwie do narzędzi desktopowych lub wiersza poleceń nie wymaga żadnej instalacji ani konfiguracji — wystarczy otworzyć stronę i od razu zacząć pracować.

Natychmiastowy czytelny wydruk
Wklej lub wpisz XML i natychmiast otrzymaj wcięte dane wyjściowe. Bez czekania na instalację narzędzia wiersza poleceń ani uruchamiania kroku kompilacji.
🔒
Przetwarzanie z priorytetem prywatności
Całe parsowanie i formatowanie odbywa się w przeglądarce przy użyciu API DOMParser. Twój XML nigdy nie opuszcza urządzenia i nie jest wysyłany na żaden serwer.
🎨
Konfigurowalne wcięcie
Wybierz wcięcie 2-spacjowe, 4-spacjowe lub tabulatorowe, aby dopasować standardy kodowania projektu bez edytowania plików konfiguracyjnych.
📋
Bez konta ani instalacji
Otwórz stronę, wklej XML i skopiuj wynik. Bez formularzy rejestracyjnych, oprogramowania desktopowego ani rozszerzeń przeglądarki.

Zastosowania formatera XML

Programowanie frontendowe
Sprawdzaj znaczniki SVG lub fragmenty XHTML zwracane przez CMS. Formatowanie surowych danych wyjściowych pozwala szybko zlokalizować konkretne atrybuty i zagnieżdżone grupy.
Programowanie backendowe
Debuguj odpowiedzi SOAP, kanały RSS lub ładunki XML-RPC z usług zewnętrznych. Sformatowane dane wyjściowe pozwalają prześledzić brakujące elementy lub nieprawidłowe przestrzenie nazw.
DevOps i CI/CD
Czytaj pliki Maven pom.xml, skrypty Ant build lub pliki projektów .csproj wygenerowane maszynowo bez wcięć. Formatuj je przed zatwierdzeniem, aby zachować czysty diff.
QA i testowanie
Porównuj oczekiwane i rzeczywiste ładunki XML w testach integracyjnych. Formatowanie obu stron do tego samego stylu wcięcia eliminuje fałszywe negatywy spowodowane różnicami w białych znakach.
Inżynieria danych
Sprawdzaj eksporty XML z baz danych, potoków ETL lub rządowych portali otwartych danych. Sformatowany XML ujawnia strukturę rekordów przed napisaniem transformacji XSLT lub zapytania XPath.
Nauka XML
Studenci pracujący z samouczkami XML W3C mogą wklejać pliki ćwiczeniowe do formatera, aby sprawdzić, czy ich zagnieżdżenie i składnia atrybutów są poprawne.

Encje predefiniowane XML

XML rezerwuje pięć znaków dla swojej składni. Gdy te znaki pojawiają się jako dosłowna treść tekstowa lub wartości atrybutów, muszą być zastąpione predefiniowanymi encjami. Poprawny formater zachowuje te encje podczas czytelnego wydruku.

ZnakRola w XMLEncja
<Start of tag&lt;
>End of tag&gt;
&Start of entity&amp;
"Attribute delimiter&quot;
'Attribute delimiter&apos;

Porównanie stylów wcięcia XML

Nie ma jednego standardu wcięcia XML. Wybór zależy od konwencji zespołu i narzędzi w potoku. Oto trzy najczęściej stosowane style.

2 spacje (zalecane)
Najczęstszy wybór dla XML związanego z siecią: SVG, XHTML, SOAP, konfiguracja Spring. Utrzymuje głęboko zagnieżdżone dokumenty w zwartej formie. Domyślnie używany przez większość internetowych formaterów i IDE.
4 spacje
Preferowane w środowiskach Java (Maven, Ant, manifesty Android), gdzie pliki rzadko przekraczają 3-4 poziomy zagnieżdżenia. Odpowiada domyślnemu wcięciu w Javie i C#.
Znak tabulatora
Pozwala każdemu programiście ustawić własną szerokość wizualną w edytorze. Powszechny w projektach dziedzicznych i niektórych narzędziach Microsoft (.csproj, .nuspec). Daje mniejsze rozmiary plików niż spacje.

Przykłady kodu: formatowanie XML programistycznie

Gdy potrzebujesz formatować XML wewnątrz skryptu lub procesu kompilacji, każdy główny język ma wbudowaną lub standardową opcję biblioteczną. W Pythonie można skorzystać z modułu xml.dom.minidom lub lxml, w Javie dostępny jest javax.xml.transform z obsługą wcięć, a w Node.js istnieją biblioteki takie jak xmldom lub prettier. Poniżej znajdują się działające przykłady, które możesz skopiować bezpośrednio.

JavaScript (DOM API)
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>
Python
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())
Go
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>"
CLI (xmllint)
# 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

Często zadawane pytania

Czy formatowanie XML zmienia znaczenie dokumentu?
Nie. Formatowanie XML jedynie dodaje lub usuwa nieistotne białe znaki między tagami. Zbiór informacji XML (infoset) pozostaje identyczny. Wyjątek: jeśli schemat używa xml:space="preserve" na niektórych elementach, formater powinien pozostawić te elementy bez zmian — i to narzędzie to uwzględnia.
Jaka jest różnica między formatowaniem XML a walidacją XML?
Formatowanie dodaje wcięcia i podziały wierszy, aby XML był czytelny. Walidacja sprawdza, czy dokument jest zgodny ze schematem (XSD, DTD lub RelaxNG). Dokument może być poprawnie uformowany, ale nieważny względem schematu. Użyj tego formatera dla czytelności, a narzędzia XML Validator dla zgodności ze schematem.
Czy mogę formatować XML z przestrzeniami nazw?
Tak. DOMParser przeglądarki obsługuje przestrzenie nazw XML natywnie. Prefiksy przestrzeni nazw, domyślne deklaracje przestrzeni nazw (xmlns) i kwalifikowane nazwy atrybutów są zachowywane podczas formatowania. Formater nie dodaje, nie usuwa ani nie zmienia nazw żadnych powiązań przestrzeni nazw.
Jak duży plik XML mogę sformatować w przeglądarce?
Formatowanie w przeglądarce działa dobrze dla dokumentów do około 10 MB. Powyżej tej wartości drzewo DOM zużywa znaczną ilość pamięci i interfejs może stać się niereagujący. W przypadku bardzo dużych plików użyj narzędzia wiersza poleceń, takiego jak xmllint --format, które przetwarza XML strumieniowo.
Dlaczego mój sformatowany XML zawiera dodaną deklarację XML?
Niektóre formatery dodają <?xml version="1.0"?> podczas serializacji drzewa DOM. Ta deklaracja jest opcjonalna w XML 1.0, gdy kodowanie to UTF-8. Jeśli jej nie chcesz, usuń pierwszy wiersz z danych wyjściowych. Deklaracja nie wpływa na parsowanie przez żaden zgodny procesor XML.
Czy formatowanie XML to to samo co minifikacja XML?
To operacje odwrotne. Formatowanie dodaje białe znaki dla poprawy czytelności. Minifikacja usuwa wszystkie zbędne białe znaki, aby zmniejszyć rozmiar pliku. Obie operacje są bezstratne względem infosetu XML. Jeśli potrzebujesz zminifikować XML, użyj narzędzia XML Minifier.
Jaka jest różnica między formatowaniem XML a formatowaniem HTML?
XML jest ścisły: każdy tag musi być zamknięty, wartości atrybutów muszą być ujęte w cudzysłowy, a dokument musi mieć dokładnie jeden element główny. HTML (konkretnie HTML5) jest elastyczny: opcjonalne tagi zamykające, niecytowane atrybuty i elementy pustki jak &lt;br&gt; są prawidłowe. Formater XML odrzuci nieprawidłowy XML, podczas gdy formater HTML toleruje składnię, której XML by nie dopuścił.