Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

6. diel - Úvod do formátu XML súborov v Kotlin

V minulej lekcii, Práca s CSV súbormi v Kotlin - Načítanie objektov , sme dokončili našu objektovú formulárovú aplikáciu s databázou používateľov s použitím textových súborov vo formáte CSV.

V dnešnom Kotline tutoriále, venovanému práci so súbormi, sa zameriame na formát XML. Najprv si tento formát popíšeme a potom si ukážeme triedy, ktoré nám Kotlin poskytuje na jeho čítanie a zápis.

Formát XML

Teraz vás zahrnu množstvom pojmov, keď niečomu nebudete rozumieť, vôbec to navadí, všetko si tu ešte preberieme:)

XML (eXtensible Markup Language) je značkovací jazyk, ktorý vyvinulo W3C. To je organizácia, ktorá má na starosti webové štandardy. XML je veľmi univerzálny a je podporované množstvom jazykov i aplikácií.

Slovo extensible (rozšíriteľný) označuje možnosť vytvoriť si pomocou XML vlastný jazyk, tým je napr. XHTML pre tvorbu webových stránok. XML je jazyk samopopisovací. Zo štruktúry teda spoznáme, čo ktorá hodnota označuje.

Zatiaľ čo pri CSV formáte sa môžeme len domnievať, čo je tá tretia osmička, v XML nám bude hneď jasné, že je to počet článkov používateľa (napríklad). Nevýhodou formátu je samozrejme jeho väčšia veľkosť, čo nám však vo väčšine prípadov nevadí.

Osobne takmer vždy pri výbere formátu siaham po XML, hodí sa napr. na uloženie konfigurácie programu, hiscore hráčov hry alebo k menšej databáze užívateľov. Vďaka XSD schémam ho môžeme jednoducho zvalidovať a predísť chybám pri behu programu.

XML je možné spracovávať hneď niekoľkými spôsobmi. Obvykle to urobíme jednoduchým kontinuálnym čítaním/zápisom, alebo pomocou objektovej štruktúry DOM. Vývoj v tomto smere došiel tak ďaleko, že nám niektoré nástroje umožňujú s XML dokumentom pracovať ako s databázou a volať nad ním otázky. Používa sa na to jazyk XPath alebo SQL. Asi si dokážete predstaviť, že to uľahčí prácu.

Pre úplnosť si ešte prezradíme, že XML konkuruje jednoduchší, ale menej presadený formát JSON. Ten, na rozdiel od XML, umožňuje ľahké logovanie na koniec súboru bez načítania celého dokumentu.

XML sa veľmi často používa na výmenu dát medzi rozdielnymi systémami (napr. desktopovou aplikáciou a webovou aplikáciou na serveri).

Pre XML existuje mnoho knižníc a každý nástroj ho pozná a vie s ním pracovať. S tým súvisia webové služby, SOAP a podobne.

Porovnanie XML a CSV

Keď sme ukladali používateľa do súboru CSV. Ukladalo sa meno, vek a dátum registrácie. Hodnoty boli za sebou, oddelené bodkočiarkami. Každý riadok predstavoval jedného používateľa. Obsah súboru vyzeral teda asi takto:

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

Nezasvätený z toho nič veľmi nespozná, však?

Urobme si teraz ekvivalent súboru vo formáte 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>

Teraz každý vidí, čo je v súbore uložené.

Vek som tu uložil ako atribút len preto, aby som ukázal, že ich XML vie, inak by mohol byť ako element spolu s menom a registrovaný.

Elementy a atribúty

Teraz som teda vyzradil, že jednotlivým prvkom sa hovorí elementy. Tie určite všetci poznáte z HTML, ktoré vychádza z rovnakých základov ako XML. Elementy sú väčšinou párové, na začiatku použijeme teda element otvárací, potom nasleduje hodnota a za ňou uzatvárací element s lomítkom.

Elementy môžu obsahovať ďalšie elementy, v takom prípade hovoríme o stromovej štruktúre. Vďaka tomu nie je problém do jediného XML dokumentu uložiť celú hierarchiu objektov.

Na začiatku súboru je XML hlavička. Aby bol dokument validný, musí obsahovať práve jeden koreňový element, tu v našom príklade sme použili element uzivatele. V koreňovom elemente sú potom zabalené ďalšie elementy. Hodnoty atribútov sa píšu za názov atribútu do úvodzoviek.

Určite vidíme, že nám súbor nabobtnal. To je daň za to, že vyzerá pekne. Keby nemal používateľ atribúty len tri, ale napr. tridsať, bolo by vidieť, ako CSV formát prestáva stačiť.

Osobne sa s pribúdajúcimi skúsenosťami stále viac prikláňam k riešeniam, ktoré sú prehľadné a jednoduché, aj keď treba zaberajú viac pamäte (a to nielen v súboroch, ale aj v zdrojovom kóde). Nie je nič horšie, než keď programátor príde za rok k svojmu programu a vôbec nevie, čo je ten ôsmy parameter v CSV, kde je na riadku 100 nejakých čísel. Alebo čo je to päťrozmerné pole, ktoré je síce hrozne rýchle, ale keby si namiesto neho postavil objektovú štruktúru, nemusel by teraz písať program znova. Ale to som odbočil.

XML v Kotlin

Existujú dva základné prístupy ku XML:

  • Môžeme sa rozhodnúť použiť kontinuálny prístup, ktorý využíva tzv. SAX parser.
  • Alebo zvolíme objektový prístup s využitím už spomínaného DOM (Document Object Model).
Opäť máme v Kotline viac spôsobov, ako s XML pracovať, existuje tu ešte mnoho ďalších pomocných tried.

My si dnes popíšeme prvý z prístupov – parsovanie XML cez SAX. Ide o najjednoduchšie riešenie práce s XML. K praktickým príkladom sa potom dostaneme v ďalších lekciách.

Parsovanie XML cez SAX

SAX (ako Simple API for XML) je vlastne jednoduchá nadstavba čítačky textových súborov. Zápis SAXom je pomerne jednoduchý. Postupne zapisujeme elementy a atribúty tak, ako idú v súbore za sebou. Stromovú štruktúru tu teda ignorujeme. Kotlín nám poskytuje triedu DocumentBuilderFactory, ktorá je ďalej obalená triedou SAXParserFactory. Tá nás odtieňuje od toho, že je XML textový súbor. Pracujeme vďaka tomu iba s elementmi.

Čítanie prebieha podobne, ako zápis. XML teda čítame ako textový súbor, riadok po riadku, zhora nadol. SAX nám však nedáva riadky, ale tzv. uzly (anglicky node), na ktoré pri čítaní postupne naráža. Uzol môže byť element, atribút alebo hodnota. V cykle uzly dostávame tak, ako idú v súbore za sebou. Na čítanie použijeme triedu XMLStreamReader.

Výhodou SAX je vysoká rýchlosť a pamäťová nenáročnosť. Nevýhody spoznáme, až tento prístup porovnáme s objektovým prístupom DOM.

V budúcej lekcii, Zápis XML súborov SAXom v Kotline , si vytvoríme XML súbor pomocou prístupu SAX.


 

Predchádzajúci článok
Práca s CSV súbormi v Kotlin - Načítanie objektov
Všetky články v sekcii
Súbory a práce s nimi v Kotlin
Preskočiť článok
(neodporúčame)
Zápis XML súborov SAXom v Kotline
Článok pre vás napísal Filip Studený
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
.
Aktivity