Hirdetés

Alkalmazásfejlesztés badára: XML-kezelés

Bevezetés

Aki egy kicsit is jártas programozásban vagy az informatika világában, biztosan ismerősen cseng neki az xml szó. A rövidítés az eXtensible Markup Language szókapcsolatot takarja, egy olyan szabályrendszert biztosít, mely segítségével a számítógép számára feldolgozható módon tárolhatjuk a dokumentumainkat és az adatstruktúráinkat. Az xml kiterjesztésű dokumentumok egy deklarációval kezdődnek, amely a verziót és a kódolást tartalmazza, a további információt pedig úgynevezett tagekben tárolja. Nagyjából ennyit elég is tudni a mai poszt végigzongorázásához, csapjunk bele!

XML a badán

Az SDK tartalmaz egy Osp::XML névteret, mely segítségével xml dokumentumokat olvashatunk és módosíthatunk. Maga a cucc a libXml2 nevű könyvtárra épül, ez egy komoly, C nyelven íródott xml-kezelési képességekkel felvértezett library, amely képes a DTD validációra, SAX és DOM alapú parse-olásra, távoli xml beolvasására (alap HTML és FTP támogatással), a lekérdezéseinket  pedig XPath  nyelven írhatjuk meg (az XPath szintaktikáról nem írok, olvasmányként ezt ajánlom, itt öt perc alatt el leet sajátítani az alapokat). A könyvtár ráadásul nagymértékben hordozható, mivel csupán a sztenderd ANSI C könyvtárakat használja.

A kód

Maga a program nagyon egyszerű, csak egy xml fájl olvasását hivatott demonstrálni. Tartalmaz egy listát (Osp::UI::Controls::SimpleList), és egy gombot, amelyet megnyomva elindul a parse-olást végző függvény, végigmegy a fájlon és benépesíti az elemekkel a listát. Az általam használt példa-xml nagyon egyszerű felépítésű, tartalmaz egy szülőelemet és néhány gyermeket, melyek mindegyikéhez két attribútum van rendelve, egy név és egy ár. Maga a fájl letölthető innen.

A gomb megnyomásakor a kreatívan ParseAndWrite() névre keresztelt függvény hívódik meg, a működése három részre osztható. Először be kell olvasnunk a fájlt a megfelelő típusú (Osp::Xml::xmlDoc) változóba és meg kell határozni az XPath-kontextust. A második körben ki kell értékelnünk az XPath lekérdezéseket. Én két nagyon egyszerű lekérdezést használtam, az egyikkel a neveket (//nev), a másikkal az árakat (//ar) szedtem ki a struktúrából. A  használt lekérdezésről röviden: a // az elején azt mondja meg, hogy az összes találatot kiszedjük az adott csomópontból (jelen esetben a gyökérből), attól függetlenül, hogy azon belül hol vannak. A nev és az ar pedig beszédesek, a nekik megfelelő tagekben lévő adatokat keressük. Ez után be kell járnunk az eredményhalmazt, ezt célszerű egy for ciklussal megtenni, lévén a halmaztól elkérhető a számossága. A ciklus minden egyes körében berakjuk a megfelelő értékeket a listánkba, és készen is vagyunk.

A példaalkalmazás egy nagyon egyszerű lekérdezést tartalmaz (még namespace-eket sem kezelünk), de ne ijedjen meg senki, az XPath-szal sokkal komolyabb dolgokat is lehet művelni. Ez a bejegyzés csak demonstrációs jelleggel keletkezett, ugyanezt a módszert alkalmazva bejárhatunk komplexebb xml-eket is, minden az XPath lekérdezésünktől függ. A közeljövőben mindenképpen rászánunk még egy-két posztot a dologra, de mivel ez nem XPath blog, ezért egyelőre a perifériára szorul. Maga az XMLPstdrt névre keresztelt projekt elérhető ebből az svn repositoryból: https://mobilarenabadadev.googlecode.com/svn/trunk/, az svn Eclipse-be történő integrálásáról ebben a bejegyzésben olvashattok. Zárójelben megjegyzem, kedden megjelent a nem bétás 1.2-es SDK, érdemes frissíteni.

dr. Kind

Azóta történt

Előzmények