Będę szczery — kiedy widzę „XML" w 2026 roku, moim pierwszym odruchem jest pomyśleć „kod legacy". Ale to właściwie niesprawiedliwe. XML po cichu napędza jedne z najważniejszych systemów na świecie i nie zamierza nigdzie odchodzić. Pozwólcie, że pokażę wam dlaczego.

Gdzie XML wciąż rządzi

Bankowość i finanse: Za każdym razem, gdy robisz przelew bankowy w Europie, jest duża szansa, że przechodzi on przez komunikaty ISO 20022 — które są XML-em. Sprawozdawczość finansowa używa XBRL (też XML). Mówimy o bilionach dolarów przepływających przez rury XML każdego dnia.

Ochrona zdrowia: HL7 FHIR używa zarówno JSON, jak i XML, ale starsze komunikaty HL7 v2/v3, na których działają większość systemów szpitalnych? Czysty XML. Dokumentacja pacjentów, wyniki laboratoryjne, recepty — wszystko XML.

Twoje dokumenty Office: Każdy plik .docx, .xlsx i .pptx to tak naprawdę archiwum ZIP pełne plików XML. Otwórz kiedyś jeden z nich — to fascynujące (i trochę przerażające).

Programowanie Android: Każdy plik layoutu w Androidzie to XML. activity_main.xml to prawdopodobnie pierwszy plik, który tworzy każdy programista Android.

Narzędzia budowania: pom.xml Mavena, pliki .csproj .NET, konfiguracje Spring Framework — XML jest głęboko osadzony w korporacyjnych łańcuchach narzędzi.

Co XML potrafi, a JSON nie

Przestrzenie nazw: Wyobraź sobie łączenie elementów z różnych słowników w jednym dokumencie bez kolizji nazw. Przestrzenie nazw XML to umożliwiają. To niezbędne dla formatów jak SVG osadzone w HTML lub mieszanie nagłówków SOAP z niestandardowymi ładunkami.

Zawartość mieszana: Spróbuj przedstawić akapit, w którym niektóre słowa są pogrubione, a inne pochylone w JSON. W najlepszym razie jest to niezręczne. XML radzi sobie z tym naturalnie, bo został zaprojektowany dla dokumentów, nie tylko dla danych.

Transformacje XSLT: Możesz napisać jeden arkusz stylów XSLT, który przekształca XML w HTML, PDF, inny format XML lub zwykły tekst. To deklaratywny język transformacji bez prawdziwego odpowiednika w świecie JSON.

Walidacja schematu: XML Schema (XSD) jest bardziej ekspresyjne niż JSON Schema w wielu obszarach. Może wymuszać kolejność elementów, złożone hierarchie typów i ograniczenia między polami, z którymi JSON Schema ma problemy.

Przykład z prawdziwego świata

Załóżmy, że budujesz system e-commerce, który musi generować faktury. Z XML + XSLT przechowujesz dane faktur w XML, a następnie stosujesz różne arkusze stylów XSLT, aby wygenerować: wersję HTML dla przeglądarki, wersję PDF do druku i wersję EDI dla systemu dostawcy — wszystko z tych samych danych źródłowych. Spróbuj zrobić to z JSON.

Przestrzenie nazw XML w akcji

Przestrzenie nazw to jedna z tych funkcji XML, które wydają się zagmatwane, dopóki naprawdę ich nie potrzebujesz. Oto praktyczny przykład — ikona SVG osadzona w dokumencie XHTML:

xml

Bez przestrzeni nazw parser nie wiedziałby, czy należy do słownika HTML, czy do słownika SVG. Przestrzenie nazw pozwalają swobodnie mieszać słowniki w jednym dokumencie, a to jest coś, do czego JSON po prostu nie ma mechanizmu.

Częste błędy, które programiści popełniają z XML

Po latach pracy z XML w systemach produkcyjnych, oto pułapki, które widzę najczęściej:

1. Ignorowanie deklaracji kodowania. Jeśli Twój plik XML zawiera znaki spoza ASCII, ale zapomniałeś o deklaracji kodowania, parsery przyjmą UTF-8 lub cokolwiek jest ich domyślnym ustawieniem. Zawsze deklaruj je jawnie:

xml

2. Używanie atrybutów, gdy elementy mają więcej sensu. Atrybuty nie mogą przechowywać złożonych struktur, nie mogą się powtarzać i nie rozwijają się łatwo. Jeśli wartość może w przyszłości stać się bardziej złożona, użyj elementu podrzędnego.

3. Brak walidacji względem schematu. Przekazywanie niezwalidowanego XML to przepis na ciche awarie. Jeśli masz XSD, używaj go. Wyłapuje problemy z danymi w momencie parsowania, zamiast pozwalać złym danym kaskadować przez system.

4. Budowanie XML przez konkatenację ciągów znaków. Nigdy tego nie rób — to luka w zabezpieczeniach czekająca na wykorzystanie. Zawsze używaj odpowiedniej biblioteki XML lub konstruktora DOM.

Wskazówki dotyczące wydajności przetwarzania XML

Parsery XML występują w dwóch głównych odmianach, a wybór odpowiedniej ma duże znaczenie dla wydajności:

  • Parsery DOM ładują cały dokument do pamięci jako drzewo. Świetne dla małych i średnich dokumentów, gdzie potrzebujesz losowego dostępu. Złe dla dużych plików — plik XML o rozmiarze 100 MB może zużyć ponad 1 GB RAM jako drzewo DOM.
  • Parsery SAX/StAX przetwarzają dokument jako strumień, element po elemencie. Używają prawie zerowej ilości pamięci i są znacznie szybsze dla dużych plików. Kompromisem jest to, że nie możesz skakać po dokumencie.

Oto zasada kciuka: jeśli Twój XML ma mniej niż 10 MB, DOM jest w porządku. Powyżej 10 MB zdecydowanie rozważ strumieniowanie. Powyżej 100 MB strumieniowanie jest obowiązkowe, chyba że lubisz patrzeć, jak Twojemu serwerowi kończy się pamięć.

XML vs JSON: Szybka ściągawka

CechaXMLJSON
KomentarzeTak ()Nie
Przestrzenie nazwTakNie
Walidacja schematuXSD, RelaxNG, SchematronJSON Schema
Zawartość mieszanaNatywne wsparcieNiezręczne obejścia
Typy danychPrzez XSDString, number, boolean, null, array, object
TransformacjaXSLTWłasny kod
Rozmiar plikuWiększy (rozbudowane tagi)Mniejszy
Szybkość parsowaniaWolniejszaSzybsza
Czytelność dla ludziDobra (gdy sformatowany)Dobra

Krótka historia XML

XML został opublikowany jako rekomendacja W3C w lutym 1998 roku. Został zaprojektowany jako uproszczony podzbiór SGML (Standard Generalized Markup Language), który istniał od lat 80., ale był notorycznie złożony. Celem było stworzenie formatu, który byłby zarówno czytelny dla ludzi, jak i przetwarzalny przez maszyny, wystarczająco ścisły, aby uniknąć dwuznaczności, i wystarczająco elastyczny dla każdej dziedziny. Przez pierwszą dekadę lat 2000 XML był *tym* formatem wymiany danych. Usługi sieciowe SOAP, kanały RSS, kanały Atom, XHTML — wszystko było XML-em. Potem pojawił się JSON i przejął przestrzeń API webowych, ale XML utrzymał każdą dziedzinę, w której jego unikalne cechy (przestrzenie nazw, schematy, transformacje) naprawdę mają znaczenie.

Współczesny programista XML

Większość programistów pracuje dziś w środowiskach hybrydowych. Używają JSON do API webowych i komunikacji w czasie rzeczywistym, a XML do przetwarzania dokumentów, integracji korporacyjnej i zgodności regulacyjnej. Znajomość obu formatów — i wiedza, kiedy użyć którego — to naprawdę cenna umiejętność.

Bezpieczeństwo XML: XXE i inne pułapki

Jeśli jest jedna rzecz związana z XML, która nie daje spać inżynierom bezpieczeństwa w nocy, to XXE — ataki XML External Entity. I szczerze mówiąc, Ciebie też powinno to niepokoić. XXE nie bez powodu figuruje na liście OWASP Top 10 i nadal zaskakuje programistów w 2026 roku.

Tak działa XXE: XML pozwala definiować „encje" — w zasadzie zmienne — w deklaracji typu dokumentu (DTD). Encja *zewnętrzna* może odwoływać się do URL-a lub ścieżki pliku na serwerze. Jeśli parser jest skonfigurowany do rozwiązywania zewnętrznych encji (wiele jest domyślnie), atakujący może stworzyć XML, który odczytuje dowolne pliki z Twojego serwera:

xml

Gdy parser to przetwarza, zastępuje &xxe; zawartością /etc/passwd. Tak po prostu atakujący odczytuje wrażliwe pliki z Twojego systemu. W bardziej zaawansowanych atakach mogą nawet wykonywać wychodzące żądania HTTP z Twojego serwera (Server-Side Request Forgery) lub spowodować odmowę usługi za pomocą niesławnego ataku „billion laughs" — rekurencyjnego rozwijania encji, które zużywa całą dostępną pamięć.

Rozwiązanie jest proste: wyłącz przetwarzanie zewnętrznych encji. Oto jak to zrobić w dwóch popularnych językach:

javascript
python

Oprócz XXE uważaj na XML injection — gdzie dane użytkownika są wstawiane do XML bez odpowiedniego escape'owania. To XML-owy odpowiednik SQL injection. Zawsze używaj odpowiedniej biblioteki XML zamiast konkatenacji ciągów znaków (o czym wspomniałem w sekcji o częstych błędach, ale warto to powtórzyć, bo jest to *aż tak* ważne).

Złota zasada: nigdy nie parsuj niezaufanego XML z domyślnymi ustawieniami parsera. Zawsze jawnie wyłączaj rozwiązywanie zewnętrznych encji, przetwarzanie DTD i przetwarzanie XInclude. Traktuj XML ze świata zewnętrznego z taką samą podejrzliwością, z jaką traktowałbyś dane użytkownika w zapytaniu SQL.

XPath: Odpytywanie XML jak profesjonalista

Jeśli regularnie pracujesz z XML i nie używasz XPath, robisz to na trudny sposób. XPath to język zapytań zaprojektowany specjalnie do nawigowania po dokumentach XML i jest niesamowicie potężny, gdy już go opanujesz.

Myśl o XPath jak o selektorach CSS, ale dla XML. Zamiast ręcznie przechodzić DOM za pomocą zagnieżdżonych pętli, piszesz zwięzłe wyrażenie, które wybiera dokładnie te węzły, których szukasz. Oto kilka praktycznych przykładów:

plaintext

Oto jak używać XPath w JavaScript i Pythonie — dwóch językach, po które sięga większość programistów:

javascript
python

Warto zaznaczyć: JSON nie ma wbudowanego języka zapytań. Najbliższym odpowiednikiem jest jq, które jest fantastyczne, ale jest zewnętrznym narzędziem, a nie standaryzowaną częścią formatu. XPath jest wbudowany w ekosystem XML — obsługiwany natywnie przez przeglądarki, dostępny w praktycznie każdym języku programowania i standaryzowany przez W3C. To jedna z prawdziwych przewag konkurencyjnych XML.

XPath stanowi również podstawę dla XSLT (który wybiera węzły do transformacji) i XQuery (pełny język zapytań dla baz danych XML). Gdy nauczysz się XPath, odblokowujesz całą rodzinę technologii XML.

XML w standardach branżowych

Wspomniałem wcześniej o bankowości i ochronie zdrowia, ale zasięg XML w standardach branżowych jest znacznie głębszy. Oto przegląd dziedzin, w których XML nie jest tylko używany — jest *wymagany*:

Prawo: Branża prawnicza w dużym stopniu polega na XML do składania dokumentów sądowych i zarządzania sprawami. LegalXML, opracowany przez OASIS, standaryzuje elektroniczne składanie dokumentów sądowych, cytaty prawne i metadane spraw. W USA wiele stanowych systemów sądowych wymaga formatów e-filing opartych na XML. Jeśli budujesz technologię prawną, budujesz na XML.

Wydawnictwo: Tu jest coś, co zaskakuje ludzi — każdy ebook EPUB, który kiedykolwiek czytałeś, jest zbudowany na XML. Pliki EPUB to archiwa ZIP zawierające pliki treści XHTML (które są XML), deskryptor pakietu OPF (XML) i dokument nawigacyjny (XML). DocBook, inny format XML, jest standardem dokumentacji technicznej od lat 90. O'Reilly Media słynęło z używania DocBook przez lata do produkcji swoich książek w wielu formatach wyjściowych z jednego źródła XML.

Nauka i matematyka: MathML to standard W3C do reprezentowania notacji matematycznej w XML. Jest obsługiwany przez wszystkie nowoczesne przeglądarki i jest niezbędny dla publikacji naukowych w sieci. Jest też Chemical Markup Language (CML) dla struktur molekularnych, Astronomical Markup Language dla danych astronomicznych i dziesiątki innych naukowych słowników XML. Gdy precyzja i jednoznaczna reprezentacja danych mają znaczenie — a w nauce zawsze mają — XML dostarcza.

Rząd i zamówienia publiczne: Universal Business Language (UBL) to standard OASIS używany przez rządy na całym świecie do zamówień publicznych, fakturowania i zarządzania łańcuchem dostaw. Dyrektywa Unii Europejskiej o e-fakturowaniu zasadniczo wymaga XML opartego na UBL do fakturowania między firmami a rządem. Jeśli sprzedajesz rządom europejskim, wysyłasz faktury XML.

Lotnictwo: Aeronautical Information Exchange Model (AIXM) definiuje schematy XML dla danych lotniczych — lotniska, przestrzenie powietrzne, pomoce nawigacyjne, procedury. Każdy system zarządzania lotem, każda aktualizacja kontroli ruchu lotniczego, każdy NOTAM (Notice to Airmen) dotyka danych AIXM. To dziedzina, w której „po prostu przejdźmy na JSON" nie jest rozmową, którą ktokolwiek prowadzi, ponieważ implikacje bezpieczeństwa migracji formatu byłyby ogromne.

Wspólny wątek we wszystkich tych branżach? Wybrały XML, bo potrzebowały silnej walidacji, przestrzeni nazw do łączenia słowników i formatu, który mógłby ewoluować przez dziesięciolecia bez naruszania kompatybilności wstecznej. Te wymagania się nie zmieniły.

SOAP vs REST: Dlaczego XML API nadal istnieją

Jeśli zacząłeś swoją karierę w ostatniej dekadzie, możesz myśleć, że wszystkie API to REST z JSON. Ale wejdź do dowolnego dużego banku, firmy ubezpieczeniowej, telekomunikacyjnej czy agencji rządowej, a znajdziesz usługi sieciowe SOAP obsługujące krytyczną logikę biznesową. I są ku temu dobre powody.

SOAP (Simple Object Access Protocol) to oparty na XML protokół komunikacyjny z kilkoma funkcjami, których REST+JSON po prostu nie oferuje od razu:

Silne kontrakty przez WSDL: Plik WSDL (Web Services Description Language) opisuje *wszystko* o usłudze SOAP — operacje, struktury komunikatów wejściowych/wyjściowych, typy danych, endpointy. Możesz automatycznie wygenerować kod klienta z WSDL w Javie, C#, Pythonie lub praktycznie każdym języku korporacyjnym. API REST mają OpenAPI/Swagger, ale adopcja jest dobrowolna. W SOAP kontrakt jest usługą.

Wbudowana obsługa błędów: SOAP ma standaryzowany element fault z kodami błędów, ciągami błędów i elementami szczegółów. Każdy klient SOAP dokładnie wie, jak parsować błędy. API REST? Każde API wymyśla własny format błędów.

WS-Security: SOAP ma kompleksowy standard bezpieczeństwa wspierający szyfrowanie i podpisywanie na poziomie wiadomości — nie tylko na poziomie transportu (TLS). To oznacza, że wiadomość SOAP może przechodzić przez serwery pośredniczące, pozostając zaszyfrowana end-to-end. To ma duże znaczenie w usługach finansowych, gdzie wiadomości przechodzą przez wiele systemów.

Transakcje i niezawodność: WS-AtomicTransaction i WS-ReliableMessaging zapewniają obsługę transakcji rozproszonych i gwarantowane dostarczenie. To trudne problemy, które REST pozostawia całkowicie programiście aplikacji.

Mając to na uwadze, SOAP ma realne wady: komunikaty są rozwlekłe, krzywa uczenia się jest stroma, debugowanie jest bolesne, a narzut XML sprawia, że jest wolniejszy niż JSON przy prostych operacjach CRUD. Dla nowych API webowych i mikroserwisów REST+JSON to prawie zawsze właściwy wybór. Ale dla złożonych integracji korporacyjnych — szczególnie w regulowanych branżach — wbudowane egzekwowanie kontraktów i funkcje bezpieczeństwa SOAP pozostają naprawdę wartościowe.

Migracja z XML do JSON: Praktyczny przewodnik

W pewnym momencie kariery ktoś poprosi Cię o migrację systemu opartego na XML do JSON. Zanim powiesz „jasne, łatwe", pozwól, że przeprowadzę Cię przez pułapki, które zaskakują wszystkich.

Utrata atrybutów: Elementy XML mogą mieć zarówno atrybuty, jak i elementy podrzędne. Obiekty JSON mają tylko właściwości. Przy konwersji Dune, gdzie trafia id? Gdzie trafia format? Gdzie trafia treść tekstowa? Popularne konwencje używają prefiksu @ dla atrybutów i #text dla treści tekstowej, ale nie ma uniwersalnego standardu — i cokolwiek wybierzesz, drugi system musi rozumieć Twoją konwencję.

Konwersja typów: XML jest z natury tekstowy. Ciąg "42" w XML może być liczbą całkowitą, zmiennoprzecinkową, ciągiem znaków lub kodem pocztowym. JSON ma odrębne typy. Podczas migracji potrzebujesz jawnych reguł mapowania typów, bo inaczej skończysz z ciągami zamiast liczb (lub gorzej, liczbami zamiast ciągów — żegnajcie zera wiodące w kodach pocztowych).

Niejednoznaczność tablic: Ta jest szczególnie podstępna. W XML element z jednym dzieckiem to pojedynczy element. Jeśli ma wiele dzieci o tej samej nazwie, naturalnie tworzą kolekcję. Ale JSON musi z góry wiedzieć, czy coś jest tablicą, czy pojedynczą wartością. Rozważ: Widget — czy item to ciąg znaków czy jednoelementowa tablica? Jeśli inne zamówienie ma trzy pozycje, struktura się zmienia. Twój konsument JSON musi obsługiwać oba przypadki.

Kroki do udanej migracji:

  • Krok 1: Zinwentaryzuj wszystkie schematy XML i udokumentuj dokładnie, których funkcji używasz (przestrzenie nazw, atrybuty, zawartość mieszana, sekcje CDATA, instrukcje przetwarzania).
  • Krok 2: Najpierw zaprojektuj schemat JSON, jawnie decydując, jak obsługiwać atrybuty, zawartość mieszaną i tablice. Dokumentuj każdą decyzję.
  • Krok 3: Zbuduj warstwę konwersji (nie wielki rewrite). Uruchom oba formaty równolegle i porównuj wyniki.
  • Krok 4: Migruj konsumentów po jednym, utrzymując endpointy XML przy życiu, dopóki wszyscy nie przejdą.
  • Krok 5: Prowadź systemy równolegle przez co najmniej jeden pełny cykl biznesowy (miesiąc, kwartał lub rok w zależności od domeny) przed wycofaniem XML.

Kiedy NIE migrować: Jeśli Twój XML intensywnie mieszał przestrzenie nazw, używa transformacji XSLT lub reguł biznesowych opartych na XPath, koszt migracji może przewyższyć korzyści. Również jeśli Twój XML jest wymagany przez standard regulacyjny (HL7, ISO 20022, UBL), będziesz utrzymywać XML niezależnie — dodanie JSON oznacza tylko drugi format do obsługi.

Narzędzia XML, które każdy programista powinien znać

Praca z XML nie musi być bolesna, jeśli masz odpowiednie narzędzia. Oto te, na których polegam:

xmllint: Dostarczany z libxml2 i prawdopodobnie już jest w Twoim systemie. Waliduje XML względem schematów, formatuje (pretty-print) XML i ewaluuje wyrażenia XPath — wszystko z wiersza poleceń. To curl świata XML: prosty, szybki i wszędzie obecny.

Saxon: Złoty standard procesorów XSLT i XQuery, opracowany przez Michaela Kay'a (który dosłownie redagował specyfikacje XSLT 2.0 i 3.0). Jeśli robisz poważne transformacje XSLT, Saxon to jest to, czego potrzebujesz. Darmowa wersja Home Edition obsługuje XSLT 3.0 i XPath 3.1.

XMLSpy (Altova): Komercyjne IDE XML popularne w korporacjach. Ma wizualne edytory schematów, debuggery XSLT i integrację z bazami danych. Jest drogie, ale potężne — szczególnie przydatne przy pracy z ogromnymi schematami XSD, które są niepraktyczne do edycji ręcznej.

oXygen XML Editor: Mój osobisty faworyt do intensywnej pracy z XML. Obsługuje debugowanie XSLT z wykonywaniem krok po kroku, ewaluację XPath, edycję z obsługą schematów i autouzupełnianiem, oraz ma doskonałe wsparcie DITA i DocBook. Jeśli regularnie piszesz XSLT, oXygen zwraca się w tydzień.

xmlstarlet: Zestaw narzędzi XML dla wiersza poleceń, który pozwala odpytywać, edytować, walidować i transformować XML bezpośrednio z terminala. Pomyśl o nim jak o sed i awk, ale dla XML. Jest idealny do skryptów powłoki i potoków CI/CD, gdzie musisz wyciągać wartości z plików konfiguracyjnych XML lub modyfikować XML na bieżąco.

Visual Studio Code z rozszerzeniami XML: Jeśli już pracujesz w VS Code, rozszerzenie „XML" od Red Hat zapewnia walidację schematów, autouzupełnianie i formatowanie. W połączeniu z rozszerzeniem „XSLT/XPath" to zaskakująco zdolny darmowy zestaw do okazjonalnej pracy z XML.

Wypróbuj sam

Potrzebujesz połączyć oba światy? Nasz Konwerter XML na JSON obsługuje transformację, zachowując strukturę danych i typy. Jeśli debugujesz XML, XML Formatter sprawi, że nawet najbrzydszy XML stanie się czytelny. A przed wdrożeniem jakiegokolwiek XML na produkcję, przepuść go przez XML Validator, aby wcześnie wyłapać problemy strukturalne.