XML formázása és behúzása
- Irányítópult
- Dokumentáció
- API
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.pptxfájlok olyan ZIP archívumok, amelyek XML fájlokat tartalmaznak, amiket gyakran vizsgálni kell. - XML Sitemaps: a keresőmotoroknak kiszolgált
sitemap.xmlfá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:
- 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).
- 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ű:
- Illessze be az XML dokumentumát a szövegmezőbe, vagy töltsön fel egy
.xmlfájlt. - Hagyja jóvá az űrlapot: a dokumentum elemzése és behúzása automatikusan megtörténik.
- 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.
- 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 (&, <, >). 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öztGET https://cdrn.fr/api/v1/tools/xml-formatter- lekéri ezen eszköz sémájátPOST https://cdrn.fr/api/v1/tools/xml-formatter/execute- végrehajtja ezen eszközt JSON payloaddal