O ovom alatu
XML formatiranje uvlači ugniježđene elemente tako da hijerarhija dokumenta postaje vidljiva. Kompaktni XML — sve u jednoj liniji — tehnički je valjan i koristan za prijenos, ali nečitljiv za ljude. Formatirani XML dodaje prijelome redaka između elemenata i uvlači djecu unutar njihovih roditelja, što ga čini skenirajućim, diffable i uređivačkim rukom.
Ovaj alat za formatiranje raščlanjuje ulaz pomoću DOMParsera kako bi potvrdio dobro oblikovanost, zatim šeta rezultirajućim DOM-om kako bi emitirao uvučeni izlaz. Komentari, upute za obradu i CDATA odjeljci su sačuvani. Samozatvarajuće oznake (one bez djece) drže se kompaktno u jednoj liniji; oznake s djecom raspoređene su u više redaka s uvučenom djecom.
Uvlačenje s dva razmaka je zadano i odgovara najčešćim XML konvencijama. Formater je konzervativan u pogledu preoblikovanja: postojeća struktura je sačuvana, samo se mijenja razmak između elemenata. Podaci prolaze kroz bilo koji XML parser identično prije i nakon formatiranja.
Zašto formatirati XML
Kompaktni XML je nečitljiv. SOAP odgovori, RSS izvori i mnoge konfiguracijske datoteke stižu kao XML u jednom retku koji je tehnički valjan, ali praktički neproziran. Oblikovanje otkriva strukturu dokumenta, omogućuje lociranje određenih elemenata i čini razlike u kontroli verzija smislenima.
Formatiranje također služi kao provjera valjanosti. Ako se XML ne uspije analizirati tijekom formatiranja, poruka o pogrešci identificira problem — obično nezatvorene oznake, neusklađena imena elemenata ili nevažeći znakovi. Hvatanje XML pogrešaka prije slanja strogom potrošaču štedi vrijeme otklanjanja pogrešaka.
Tehnički detalji
DOMParser proizvodi XML DOM. Formater hoda po stablu najprije u dubinu, emitirajući otvarajuće oznake, uvučene potomke i zatvarajuće oznake. Atributi elementa su sačuvani na početnoj oznaci; poredak atributa odgovara izvoru.
Značajan razmak unutar tekstualnih čvorova je sačuvan — formater ne može sigurno promijeniti razmak sadržaja jer može biti smislen (XML pravila očuvanja prostora razlikuju se među shemama). Mijenja se samo razmak između elemenata.
Elementi koji se sami zatvaraju (bez djece) emitiraju kao <tag attr="val"/>. Elementi sa samo tekstualnim sadržajem emitiraju se kao <tag>tekst</tag>. Elementi s podređenim elementima emitiraju se u više redaka s uvučenim podređenim elementima. CDATA odjeljci, komentari i upute za obradu emitiraju sa svojim izvornim graničnicima i sadržajem.
Često postavljana pitanja
- Koje XML pogreške ovo otkriva?
- Alat otkriva nezatvorene oznake, neusklađene oznake otvaranja/zatvaranja, nevažeće reference znakova, korijenske elemente koji nedostaju, neispravne atribute i probleme s kodiranjem. Poruke o pogreškama uključuju brojeve redaka koji vam pomažu u lociranju problema.
- Mijenja li formatiranje XML sadržaj?
- Formatiranje samo prilagođava razmake i uvlake između elemenata. Sadržaj elementa, atributi, CDATA odjeljci i upute za obradu sačuvani su točno onako kako su uneseni.
- Može li obraditi velike XML datoteke?
- Alat obrađuje datoteke do nekoliko megabajta u pregledniku. Za vrlo velike XML dokumente (50 MB+), razmislite o korištenju alata naredbenog retka kao što je xmllint za bolje performanse.
- Podržava li XML imenske prostore?
- da Format ispravno rukuje deklaracijama prostora imena (xmlns), prefiksiranim elementima i zadanim prostorom imena. Prostori imena su sačuvani u formatiranom izlazu.
- Jesu li prostori imena sačuvani?
- da xmlns i xmlns:prefix atributi su sačuvani na elementima gdje se pojavljuju u izvoru.
- Mogu li smanjiti XML u jedan redak?
- Neki formati XML-a nude smanjivanje. Ovaj alat usmjeren je na oblikovanje; umanjeni XML može se proizvesti uklanjanjem razmaka između elemenata pomoću regularnog izraza ili namjenskog alata.
- Je li moj XML prenesen na poslužitelj?
- Ne. DOMParser radi u vašem pregledniku; formater radi u vašem pregledniku.
- Hoće li se razmak unutar tekstualnih čvorova promijeniti?
- Ne. Razmak tekstualnog čvora je sačuvan jer se XML pravila za očuvanje prostora razlikuju ovisno o shemi. Format mijenja samo razmake među elementima.