XML formázása és behúzása

strukturált és olvasható módon formázza az XML kódot, elengedhetetlen az adatcserék olvasásához

Miért formázzunk XML-t?

Az XML formázás (más néven XML elrendezés, XML behúzás vagy pretty print) egy tömör vagy minifikált XML dokumentum átrendezését jelenti behúzott, soronként olvasható szerkezetté. A jól formázott XML javítja az emberi olvashatóságot, ami elengedhetetlen SOAP válaszok olvasásakor, RSS csatornák böngészésekor vagy konfigurációs fájlok tartalmának vizsgálatakor.

Konkrétan négy fő okból formázzunk az XML-t:

  • Debug: egy be nem zárt tag, egy hiányzó attribútum vagy egy inkonzisztens szerkezet gyors felismerése.
  • Manuális integráció: egy töredék tiszta másolása egy konfigurációs fájlba a meglévő behúzás elrontása nélkül.
  • Code review: egy XML dokumentum két verziójának összehasonlítása egy Git diff-ben olvashatóvá válik, ha minden tag saját sorban van.
  • Dokumentáció és példák: a formázott XML sokkal szemléletesebb egy technikai dokumentációban vagy egy README-ben.

Tipikus felhasználási esetek

Az XML továbbra is jelen van a szoftverökoszisztémában. Íme azok a formátumok, amelyeknél a fejlesztők leggyakrabban XML formázót használnak:

  • SOAP válaszok: a SOAP webszolgáltatások által visszaadott <soap:Envelope> burkolók általában minifikálva érkeznek.
  • RSS és Atom csatornák: egy szindikációs csatorna vizsgálatához vagy auditálásához.
  • Spring, Maven (pom.xml), Ant, Ivy konfigurációk: Java build és függőségi fájlok.
  • AndroidManifest.xml és egy Android projekt egyéb XML erőforrásai.
  • SVG fájlok: egy tervezőszoftverből exportált vektorgrafika gyakran egyetlen sorba van tömörítve.
  • E-kereskedelmi exportok: Google Shopping termékcsatornák, Magento, Shopify vagy PrestaShop exportok.
  • OOXML dokumentumok: a .docx, .xlsx és .pptx fájlok olyan ZIP archívumok, amelyek XML fájlokat tartalmaznak, amiket gyakran vizsgálni kell.
  • XML Sitemaps: a keresőmotoroknak kiszolgált sitemap.xml fájlok.

Hogyan működik az XML formázás

Az XML formázó nem csak véletlenszerűen ad hozzá szóközöket. Két lépést hajt végre:

  1. Parsing: a dokumentum beolvasása, majd DOM (Document Object Model) fává alakítása. Ez a lépés azt is ellenőrzi, hogy az XML jól formázott-e (szabályosan beágyazott tag-ek, idézőjelek közötti attribútumok, egyetlen gyökérelem).
  2. Behúzott szerializáció: a DOM fa újra kiadásra kerül szöveges formában, az elemek közötti soremelésekkel és a fa mélységével arányos behúzással.

Ez a faalapú megközelítés garantálja, hogy a dokumentum logikai szerkezete szigorúan azonos marad: csak a tag-ek közötti nem jelentős szóközök módosulnak. A CDATA szakaszok, a megjegyzések és a feldolgozási utasítások megmaradnak. A fejlettebb transzformációk (XSLT) vagy lekérdezések (XPath) szintén ezen a DOM fán működnek.

Hogyan használjuk az XML formázót

Az eljárás szándékosan egyszerű:

  1. Illessze be az XML dokumentumát a szövegmezőbe, vagy töltsön fel egy .xml fájlt.
  2. Hagyja jóvá az űrlapot: a dokumentum elemzése és behúzása automatikusan megtörténik.
  3. A formázott eredmény megjelenik a kimeneti zónában. Elemzési hiba esetén egy üzenet jelzi a probléma jellegét és hozzávetőleges helyét.
  4. Másolja ki az eredményt a dedikált gombbal, vagy töltse le, hogy közvetlenül integrálja a projektjébe.

Az XML behúzás legjobb gyakorlatai

Néhány konvenció, amelyet be kell tartani a tiszta és tartós XML létrehozásához:

  • Behúzás: 2 vagy 4 szóköz a csapata konvenciójától függően. Maradjon következetes az egész projektben.
  • Soremelések: soronként egy elem, ami használhatóvá teszi a Git diff-eket.
  • CDATA szakaszok: egy jó formázó hiánytalanul megőrzi a <![CDATA[ ... ]]> blokkokat anélkül, hogy újra behúzná azok tartalmát, amelyet nyers szövegként kezel.
  • Kódolás: mindig deklarálja a kódolást az első sorban a <?xml version="1.0" encoding="UTF-8"?> segítségével. Az UTF-8 a de facto szabvány.
  • Attribútumok: ha egy elemnek sok attribútuma van, egyes csapatok az olvashatóság érdekében új sorba teszik őket; egyébként a nyitó tag-gel azonos sorban maradnak.
  • Megjegyzések: a <!-- ... --> szakaszokat a formázónak változatlanul meg kell őriznie.

Példa előtte / utána

Íme egy konkrét példa a formázó által megszépített tömör XML-re.

Előtte (egyetlen sor, olvashatatlan):

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

Utána (2 szóközzel formázva):

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

A logikai szerkezet szigorúan azonos: csak a vizuális elrendezés változik.

Teljes példa

Egy nagyobb XML dokumentum formázás után így néz ki:

<?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>

Gyakori kérdések

Mit jelent a jól formázott XML?

Az XML-t akkor nevezzük jól formázottnak (well-formed), ha megfelel az alapvető szintaktikai szabályoknak: egyetlen gyökérelem, szabályosan beágyazott és bezárt tag-ek, idézőjelek közötti attribútumok, escaped speciális karakterek (&amp;, &lt;, &gt;). Ez a dokumentum elemzésének előfeltétele. Nem tévesztendő össze az érvényes (valide) XML-lel, amely ezen felül megfelel egy XSD sémának vagy egy DTD-nek.

Mi a különbség az XML formázás (pretty print) és a minifikálás között?

A pretty print soremeléseket és behúzást ad hozzá az emberi olvashatóság érdekében. A minifikálás az ellenkezőjét teszi: eltávolítja az összes nem jelentős szóközt a dokumentum méretének csökkentése érdekében, ami hasznos a hálózati továbbításhoz (SOAP válaszok, XML API-k). A két dokumentum szemantikailag egyenértékű.

Megmaradnak a megjegyzések és a CDATA szakaszok a formázás során?

Igen. Egy helyes formázó megőrzi a <!-- ... --> megjegyzéseket, a <![CDATA[ ... ]]> szakaszokat, valamint a feldolgozási utasításokat (<? ... ?>). A CDATA tartalma érintetlen marad behúzás nélkül, mivel nyers szövegként van kezelve. Ellenőrizze az eredményt, ha a megjegyzései dokumentációs jelentőséggel bírnak.

Kezeli az eszköz az XML névtereket (xmlns)?

Igen. A névtér deklarációk (xmlns:soap="...") és a kapcsolódó előtagok (<soap:Envelope>) változatlanul megmaradnak. A formázó nem nevezi át az előtagokat és nem helyezi át a deklarációkat a fában, ami garantálja, hogy a dokumentum szemantikája azonos marad. Az alapértelmezett névterek (előtag nélkül) szintén megmaradnak a deklaráció szintjén.

Szóközökkel vagy tabulátorokkal kell behúzni?

Mindkettő működik, de a szóközök az uralkodó konvenció, mert mindenhol azonosan jelennek meg (terminálok, böngészők, Git diff). 2 vagy 4 szóköz az XML bőbeszédűségétől függően: 2 a mélyen beágyazott dokumentumokhoz (SVG, Spring konfigurációk), 4 a lapos dokumentumokhoz. A legfontosabb a következetesség az egész projektben.

Módosítja a formázó a dokumentum szemantikáját?

Nem. Csak a tag-ek közötti üres karakterek módosulnak. A DOM szerkezet, az attribútumok értékei és az elemek szöveges tartalma azonos marad. Kivétel: a jelentős szöveges tartalmat (ahol xml:space="preserve" van megadva) változatlanul kell hagyni, ellenőrizze ezt, ha az adatai jelentéssel bíró szóközöket tartalmaznak.

Lehet egyszerre ellenőrizni és formázni az XML-t?

A formázó már végez egy szintaktikai ellenőrzést (jól formázott XML), mivel elemeznie kell a dokumentumot. Az XSD sémával vagy DTD-vel szembeni ellenőrzéshez dedikált eszközre van szükség: a strukturális ellenőrzés túlmutat egy egyszerű formázó feladatkörén. xmllint --schema vagy xerces alkalmas erre a további lépésre.

Kérés példa

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

Bemeneti séma

Mező Típus Kötelező Alapértelmezett
input text

Végpontok

  • GET https://cdrn.fr/api/v1/tools - listázza az összes elérhető eszközt
  • GET https://cdrn.fr/api/v1/tools/xml-formatter - lekéri ezen eszköz sémáját
  • POST https://cdrn.fr/api/v1/tools/xml-formatter/execute - végrehajtja ezen eszközt JSON payloaddal