Formátovať a odsadiť XML

formátuje XML kód štruktúrovaným a čitateľným spôsobom, nevyhnutné pre čítanie vašich dátových výmen

Prečo formátovať XML?

XML formátovanie (nazývané tiež XML pretty print, XML odsadenie alebo XML uvedenie do formy) spočíva v preorganizovaní kompaktného alebo minifikovaného XML dokumentu do odsadenej štruktúry, čitateľnej riadok po riadku. Dobre formátované XML zlepšuje ľudskú čitateľnosť, čo je nevyhnutné pri čítaní SOAP odpovede, prechádzaní RSS feedu alebo inšpekcii obsahu konfiguračného súboru.

Konkrétne formátujeme XML zo štyroch hlavných dôvodov:

  • Debug: rýchlo identifikovať nezatvorenú tag, chýbajúci atribút alebo nekoherentnú štruktúru.
  • Manuálna integrácia: čisto skopírovať fragment do konfiguračného súboru bez porušenia existujúceho odsadenia.
  • Code review: porovnať dve verzie XML dokumentu v Git diffe sa stáva čitateľným, keď je každá tag na vlastnom riadku.
  • Dokumentácia a príklady: formátované XML je oveľa pedagogickejšie v technickej dokumentácii alebo README.

Typické prípady použitia

XML zostáva všadeprítomné v softvérovom ekosystéme. Tu sú formáty, na ktorých vývojári najčastejšie používajú XML formátor:

  • SOAP odpovede: <soap:Envelope> envelopes vrátené SOAP webovými servismi prichádzajú zvyčajne minifikované.
  • RSS a Atom feedy: pre inšpekciu alebo audit syndikačného feedu.
  • Spring, Maven (pom.xml), Ant, Ivy konfigurácie: build a Java závislosti súbory.
  • AndroidManifest.xml a ostatné XML zdroje Android projektu.
  • SVG súbory: vektorová grafika exportovaná z dizajnového softvéru je často komprimovaná na jediný riadok.
  • E-commerce exporty: Google Shopping product feedy, Magento, Shopify alebo PrestaShop exporty.
  • OOXML dokumenty: .docx, .xlsx a .pptx súbory sú ZIP archívy obsahujúce XML súbory, ktoré treba často inšpektovať.
  • XML sitemaps: sitemap.xml servované vyhľadávačom.

Ako XML formátovanie funguje

XML formátor sa neuspokojí s náhodným pridávaním medzier. Vykonáva dva kroky:

  1. Parsovanie: dokument je prečítaný a potom transformovaný na DOM strom (Document Object Model). Tento krok tiež validuje, že XML je well-formed (správne vnorené tags, atribúty v úvodzovkách, jediný koreňový element).
  2. Odsadená serializácia: DOM strom je znovu emitovaný vo forme textu so zlomami riadkov medzi elementmi a odsadením proporcionálnym k hĺbke v strome.

Tento stromový prístup garantuje, že logická štruktúra dokumentu zostáva striktne identická: modifikujú sa iba nevýznamné medzery medzi tags. CDATA sekcie, komentáre a processing inštrukcie sú zachované. Pokročilejšie transformácie (XSLT) alebo dotazy (XPath) okrem toho operujú na rovnakom DOM strome.

Ako používať XML formátor

Postup je zámerne jednoduchý:

  1. Vložte váš XML dokument do textovej zóny, alebo nahrajte .xml súbor.
  2. Validujte formulár: dokument je analyzovaný a automaticky odsadený.
  3. Formátovaný výsledok sa objaví vo výstupnej zóne. V prípade parsing chyby správa indikuje povahu a približnú pozíciu problému.
  4. Skopírujte výsledok dedikovaným tlačidlom, alebo ho stiahnite pre priamu integráciu do vášho projektu.

Dobré praktiky XML odsadenia

Niekoľko konvencií na rešpektovanie pre produkciu čistého a trvanlivého XML:

  • Odsadenie: 2 alebo 4 medzery podľa konvencie vášho tímu. Zostaňte koherentní v celom projekte.
  • Zlomy riadkov: jeden element per riadok, čo robí Git diffy využiteľnými.
  • CDATA sekcie: dobrý formátor kompletne zachováva <![CDATA[ ... ]]> bloky bez reodsadenia ich obsahu, ktorý je spracovávaný ako surový text.
  • Kódovanie: vždy deklarujte kódovanie na prvom riadku s <?xml version="1.0" encoding="UTF-8"?>. UTF-8 je de facto štandard.
  • Atribúty: ak má element veľa atribútov, niektoré tímy ich rozdelia na riadky pre čitateľnosť; inak zostávajú na rovnakom riadku ako otváracia tag.
  • Komentáre: <!-- ... --> musia byť zachované tak, ako sú, formátorom.

Príklad pred / po

Tu je konkrétny príklad kompaktného XML skrášleného formátorom.

Pred (jediný riadok, nečitateľný):

<root><item id="1">val</item><item id="2">val2</item></root>

Po (formátovaný s 2 medzerami):

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <item id="1">val</item>
  <item id="2">val2</item>
</root>

Logická štruktúra je striktne identická: iba vizuálne usporiadanie sa mení.

Kompletný príklad

Objemnejší XML dokument po formátovaní vyzerá takto:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <user id="12345">
    <name>John Doe</name>
    <email>johndoe@example.com</email>
    <address>
      <street>123 Main St</street>
      <city>Springfield</city>
      <state>IL</state>
      <postalCode>62704</postalCode>
      <country>USA</country>
    </address>
    <phoneNumbers>
      <phoneNumber type="home">555-1234</phoneNumber>
      <phoneNumber type="work">555-5678</phoneNumber>
    </phoneNumbers>
    <preferences>
      <newsletter>true</newsletter>
      <theme>dark</theme>
    </preferences>
    <lastLogin>2024-06-14T09:30:00Z</lastLogin>
  </user>
</root>

Často kladené otázky

Čo je well-formed XML?

XML sa nazýva well-formed, keď rešpektuje základné syntaktické pravidlá: jediný koreňový element, správne vnorené a uzavreté tags, atribúty v úvodzovkách, escapované špeciálne znaky (&amp;, &lt;, &gt;). Je to predpoklad pre možnosť parsovať dokument. Nezamieňať s validným XML, ktoré navyše rešpektuje XSD schému alebo DTD.

Aký je rozdiel medzi formátovaním (pretty print) a XML minifikáciou?

Pretty print pridáva zlomy riadkov a odsadenie pre ľudské čítanie. Minifikácia robí opak: odstraňuje všetky nevýznamné medzery pre redukciu veľkosti dokumentu, čo je užitočné pre sieťový prenos (SOAP odpovede, XML API). Oba dokumenty sú sémanticky ekvivalentné.

Sú komentáre a CDATA sekcie zachované pri formátovaní?

Áno. Korektný formátor zachováva <!-- ... --> komentáre, <![CDATA[ ... ]]> sekcie ako aj processing inštrukcie (<? ... ?>). Obsah CDATA zostáva nedotknutý bez reodsadenia, pretože je spracovávaný ako surový text. Skontrolujte výsledok, ak majú vaše komentáre dokumentačnú dôležitosť.

Sú XML namespaces (xmlns) spravované?

Áno. Namespace deklarácie (xmlns:soap="...") a asociované prefixy (<soap:Envelope>) sú zachované tak, ako sú. Formátor neprepomenováva prefixy a nepresúva deklarácie v strome, čo garantuje, že sémantika dokumentu zostáva identická. Default namespaces (bez prefixu) sú tiež udržiavané na svojej deklaračnej úrovni.

Treba odsadiť medzerami alebo tabulátormi?

Obe fungujú, ale medzery sú dominantná konvencia, pretože sa zobrazujú identicky všade (terminály, prehliadače, Git diff). 2 alebo 4 medzery podľa verbosity vášho XML: 2 pre veľmi vnorené dokumenty (SVG, Spring konfigurácie), 4 pre ploché dokumenty. Podstatná zostáva koherencia v celom projekte.

Modifikuje formátor sémantiku dokumentu?

Nie. Iba biele medzery medzi tags sú upravované. DOM štruktúra, hodnoty atribútov a textový obsah elementov zostávajú identické. Výnimka: významný textový obsah (s xml:space="preserve") musí byť zachovaný tak, ako je, skontrolujte tento aspekt, ak vaše dáta obsahujú medzery nesúce zmysel.

Možno validovať XML súčasne s jeho formátovaním?

Formátor už vykonáva syntaktickú validáciu (well-formed XML), keďže musí parsovať dokument. Pre validáciu proti XSD schéme alebo DTD je potrebný dedikovaný nástroj: štrukturálna validácia presahuje rámec jednoduchého formátora. xmllint --schema alebo xerces sú vhodné pre tento dodatočný krok.

Ukážka požiadavky

curl -X POST https://cdrn.fr/api/v1/tools/xml-formatter/execute \
  -H "Content-Type: application/json" \
  -d '{"input":"..."}'

Vstupná schéma

Pole Typ Povinné Predvolené
input text

Koncové body

  • GET https://cdrn.fr/api/v1/tools - vypíše všetky dostupné nástroje
  • GET https://cdrn.fr/api/v1/tools/xml-formatter - získa schému tohto nástroja
  • POST https://cdrn.fr/api/v1/tools/xml-formatter/execute - spustí tento nástroj s JSON payloadom