NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Lekce 6 - Úvod do formátu XML souborů v Kotlin

V předešlém cvičení, Řešené úlohy k 1.-5. lekci práce se soubory v Kotlin, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

V dnešním Kotlin tutoriálu, věnovanému práci se soubory, se zaměříme na formát XML. Nejprve si tento formát popíšeme a poté si ukážeme třídy, které nám Kotlin poskytuje k jeho čtení a zápisu.

Formát XML

Nyní vás zahrnu spoustou pojmů. Když něčemu nebudete rozumět, vůbec to nevadí, vše si tu ještě probereme :)

XML (eXtensible Markup Language) je značkovací jazyk, který vyvinulo W3C. To je organizace, která má na starosti webové standardy. XML je velmi univerzální a je podporováno řadou jazyků i aplikací.

Slovo extensible (rozšiřitelný) označuje možnost vytvořit si pomocí XML vlastní jazyk, tím je např. XHTML pro tvorbu webových stránek. XML je jazyk samopopisovací. Ze struktury tedy poznáme, co která hodnota označuje.

Zatímco u CSV formátu se můžeme jen domnívat, co je ta třetí osmička, v XML nám bude hned jasné, že je to počet článků uživatele (například). Nevýhodou formátu je samozřejmě jeho větší velikost, což nám však ve většině případů nevadí.

Osobně téměř vždy při výběru formátu sahám po XML, hodí se např. k uložení konfigurace programu, hiscore hráčů hry nebo k menší databázi uživatelů. Díky XSD schématům ho můžeme jednoduše zvalidovat a předejít chybám při běhu programu.

XML je možné zpracovávat hned několika způsoby. Obvykle to uděláme jednoduchým kontinuálním čtením/zápisem, nebo pomocí objektové struktury DOM. Vývoj v tomto směru došel tak daleko, že nám některé nástroje umožňují s XML dokumentem pracovat jako s databází a volat nad ním dotazy. Používá se k tomu jazyk XPath nebo SQL. Asi si dokážete představit, že to usnadní práci.

Pro úplnost si ještě prozradíme, že XML konkuruje jednodušší, ale méně prosazený formát JSON. Ten, na rozdíl od XML, umožňuje snadné logování na konec souboru bez načtení celého dokumentu.

XML se velmi často používá k výměně dat mezi rozdílnými systémy (např. desktopovou aplikací a webovou aplikací na serveru).

Pro XML existuje mnoho knihoven a každý nástroj ho zná a umí s ním pracovat. S tím souvisejí webové služby, SOAP a podobně.

Porovnání XML a CSV

Když jsme ukládali uživatele do souboru CSV. Ukládalo se jméno, věk a datum registrace. Hodnoty byly za sebou, oddělené středníky. Každý řádek představoval jednoho uživatele. Obsah souboru vypadal tedy asi takto:

Pavel Slavík;22;21.3.2000
Jan Novák;31;30.10.2012

Nezasvěcený z toho nic moc nepozná, že?

Udělejme si nyní ekvivalent souboru ve formátu XML:

<?xml version="1.0" encoding="UTF-8" ?>
<uzivatele>
    <uzivatel vek="22">
        <jmeno>Pavel Slavík</jmeno>
        <registrovan>21.3.2000</registrovan>
    </uzivatel>
    <uzivatel vek="31">
        <jmeno>Jan Novák</jmeno>
        <registrovan>30.10.2012</registrovan>
    </uzivatel>
</uzivatele>

Nyní každý vidí, co je v souboru uloženo.

Věk jsem zde uložil jako atribut jen proto, abych ukázal, že je XML umí, jinak by mohl být jako element spolu se jménem a registrován.

Elementy a atributy

Nyní jsem tedy vyzradil, že jednotlivým prvkům se říká elementy. Ty určitě všichni znáte z HTML, které vychází ze stejných základů jako XML. Elementy jsou většinou párové, na začátku použijeme tedy element otevírací, poté následuje hodnota a za ní uzavírací element s lomítkem.

Elementy mohou obsahovat další elementy, v takovém případě hovoříme o stromové struktuře. Díky tomu není problém do jediného XML dokumentu uložit celou hierarchii objektů.

Na začátku souboru je XML hlavička. Aby byl dokument validní, musí obsahovat právě jeden kořenový element, zde v našem příkladu jsme použili element uzivatele. V kořenovém elementu jsou pak zabaleny další elementy. Hodnoty atributů se píší za název atributu do uvozovek.

Určitě vidíme, že nám soubor nabobtnal. To je daň za to, že vypadá hezky. Kdyby neměl uživatel atributy jen tři, ale např. třicet, bylo by vidět, jak CSV formát přestává stačit.

Osobně se s přibývajícími zkušenostmi stále více přikláním k řešením, která jsou přehledná a jednoduchá, i když třeba zabírají více paměti (a to nejen v souborech, ale i ve zdrojovém kódu). Není nic horšího, než když programátor přijde za rok ke svému programu a vůbec neví, co je ten osmý parametr v CSV, kde je na řádku 100 nějakých čísel. Nebo co je to pětirozměrné pole, které je sice hrozně rychlé, ale kdyby si místo něj postavil objektovou strukturu, nemusel by nyní psát program znovu. Ale to jsem odbočil.

XML v Kotlin

Existují dva základní přístupy ke XML:

  • Můžeme se rozhodnou použít kontinuální přístup, který využívá tzv. SAX parser.
  • Nebo zvolíme objektový přístup s využitím již zmíněného DOM (Document Object Model).

Opět máme v Kotlin více způsobů, jak s XML pracovat, existuje zde ještě mnoho dalších pomocných tříd.

My si dnes popíšeme první z přístupů - parsování XML přes SAX. Jde o nejjednodušší řešení práce s XML. K praktickým příkladů se pak dostaneme v dalších lekcích.

Parsování XML přes SAX

SAX (jako Simple API for XML) je vlastně jednoduchá nadstavba čtečky textových souborů. Zápis SAXem je poměrně jednoduchý. Postupně zapisujeme elementy a atributy tak, jak jdou v souboru za sebou. Stromovou strukturu zde tedy ignorujeme. Kotlin nám poskytuje třídu DocumentBuilderFactory, která je dále obalena třídou SAXParserFactory. Ta nás odstiňuje od toho, že je XML textový soubor. Pracujeme díky tomu pouze s elementy.

Čtení probíhá podobně, jako zápis. XML tedy čteme jako textový soubor, řádek po řádku, odshora dolů. SAX nám však nedává řádky, ale tzv. uzly (anglicky node), na které při čtení postupně naráží. Uzel může být element, atribut nebo hodnota. V cyklu uzly dostáváme tak, jak jdou v souboru za sebou. Ke čtení použijeme třídu XMLStreamReader.

Výhodou SAX je vysoká rychlost a paměťová nenáročnost. Nevýhody poznáme, až tento přístup srovnáme s objektovým přístupem DOM.

V příští lekci, Zápis XML souborů SAXem v Kotlin, si vytvoříme XML soubor pomocí přístupu SAX.


 

Předchozí článek
Řešené úlohy k 1.-5. lekci práce se soubory v Kotlin
Všechny články v sekci
Soubory a práce s nimi v Kotlin
Přeskočit článek
(nedoporučujeme)
Zápis XML souborů SAXem v Kotlin
Článek pro vás napsal Filip Studený
Avatar
Uživatelské hodnocení:
3 hlasů
.
Aktivity