Staňte se programátorem: Napište si vlastní adresář

Dneska si napíšeme jednoduchý adresář kontaktů, který se z principu nebude lišit od toho, který používá třeba Outlook Express. Zároveň se seznámíme se zpracováváním XML dokumentu.
Staňte se programátorem: Napište si vlastní adresář

V dnešním článku si vytvoříme jednoduchý adresář, který bude obsahovat seznam našich kontaktů s jejich osobními údaji (přezdívka, telefonní číslo, bydliště, fotografie apod.). Jednotlivé kontakty budeme moci organizovat do jednoduchých skupin (práce, rodina, přátelé aj.) a celý adresář pak bude uložený v XML souboru, který je dle mnohých pro svou jednoduchou a přirozenou stromovou strukturu standardem budoucnosti pro ukládání dat. XML souborem je třeba HTML stránka, RSS zdroj, ale i některé kancelářské formáty včetně OpenDocument standardu z OpenOffice.org kancelářského balíku a nového Office OpenXML, tedy vylepšeného formátu kancelářského balíku Microsoft Office 2007. 

Práce s XML z pohledu programátora nepatřila v minulosti k těm nejjednodušším úkonům, my vám však ukážeme, že se XML bát nemusíte a pokud si osvojíte základní principy XML parseru, zjistíte, že se s XML dokumenty pracuje v každém z programovacích jazyků prakticky totožně.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Uživatelské rozhraní našeho adresáře kontaktů a struktura XML souboru

Pro práci s XML souborem použijeme třídu System.Xml.XmlDocument, která nečte jednotlivé XML tagy ze souboru, ale načte celý soubor do paměti, kde k němu pomocí metod této třídy můžeme přistupovat. Čtení a zápis do paměti je zároveň mnohem rychlejší než do souboru na pevném disku. Jakmile XML dokument v paměti dle chuti zpracujeme, opět ho přeneseme na disk. V hantýrce programátorů jsme vlastně použili čtení a zápis přes buffer.

Schéma XML souboru

Každý XML dokument musí povinně obsahovat jeden hlavní kořenový uzel, v našem případě to bude uzel s názvem „kontakty“, který obsahuje poduzly s názvem „skupina“. Každý tento poduzel bude mít jeden atribut představující název této skupiny. V jednotlivých skupinách pak budou uloženy poduzly s jednotlivými kontakty. Jejich název bude jak jinak „kontakt“ s povinným atributem „nick“, tedy přezdívkou člověka, jehož údaje budou v tomto uzlu uloženy. Podobný XML dokument by mohl vypadat například takto:

<?xml version="1.0" encoding="unicode"?>
  <kontakty>
   
<skupina nazev="Přátelé">
      <kontakt nick="Pája">
      <pozn>V pátek zajít na večeři</pozn>
     
<jmeno>Pavel Marčík</jmeno>
      <tel>737430123</tel>
      <icq>333327652</icq>
      <adresa>Dvořákova 343, Písek</adresa>
      <obr>C:\obrazky\pavel17.jpg</obr>
    </kontakt>
  </skupina>
</kontakty>

Načtení XML dokumentu v C#

Jak jsem již nastínil v úvodu, pro práci s XML dokumentem budeme používat třídu System.Xml.XmlDocument, která XML načte ze souboru a uloží jej do paměti. K načtení XML dokumentu použijeme metodu Load. K uložení pak metodu Save.

XmlDocument doc = new XmlDocument();
doc.Load(@“C:\kontakty.xml“);

Manipulace s uzly a elementy XML dokumentu

Pro výběr konkrétního poduzlu XML dokumentu nám poslouží metoda SelectSingleNode, která jako argument očekává výraz jazyka XPath což je je dotazovací jazyk, pomocí kterého lze adresovat části XML dokumentu. S XPath lze z XML dokumentu vybírat jednotlivé elementy a pracovat s jejich hodnotami a atributy. Více o tomto jazyce najdete na webových stránkách www.zvon.org. Metoda SelectSingleNode vrací instanci třídy XmlNode představující určitý element XML dokumentu.

string xpath = "//kontakty//skupina[@nazev='{0}']";
// Vybere uzel skupiny do kterého chceme nový kontakt uložit
XmlNode node = doc.SelectSingleNode(string.Format(xpath,skupina));

Pro vytvoření nového poduzlu použijeme metodu CreateElement třídy XmlDocument, kde je nutné jako argument dosadit název nového poduzlu. Daný poduzel následně přiřadíme k jeho rodičovskému uzlu pomocí metody AppendChild:

// Vytvoří nový uzel (element) představující
XmlElement kontakt = doc.CreateElement("kontakt");

// Přiřadí ke skupině nový kontakt
node.AppendChild(kontakt);

Pro vytvoření nového atributu uzlu použijeme ten samý postup s tím rozdílem, že budeme pracovat s třídou XmlAttribute:

// Vytvoří nový atribut
XmlAttribute atr = doc.CreateAttribute("nick");

// atributu přiřadí název přezdívky nového kontaktu
atr.InnerText = novyKontakt;

// přiřadí k elementu atribut
kontakt.Attributes.Append(atr);

Pro nastavení vnitřní hodnoty uzlu použijeme vlastnost InnerText:

XmlNode nod = doc.SelectSingleNode(“//....“);
nod.InnerText = “Nějaká hodnota“;

Pro odstranění určitého poduzlu použijeme metodu RemoveChild třídy XmlNode. Tato metoda očekává jako argument instanci třídy XmlNode představující hledaný poduzel. Například chceme-li z kořenového uzlu (kontakty) odstranit poduzel s názvem skupina, jehož hodnota atributu „nazev“ je „Přátelé“, zavoláme tuto metodu:

// Vybere odstraňovaný uzel představující konkrétní skupinu
XmlNode odstrNod = doc.SelectSingleNode("//skupina[@nazev='Přátelé']"));

// Z kořenového uzlu odstraní konkrétního potomka (vybraný uzel)
doc.DocumentElement.RemoveChild(odstrNod);

Nevoní vám XML? Příště vyzkoušíme SQL databázi

A to je vlastně všechno. Dnes jsme si tedy popsali základní rutiny pro manipulaci s XML dokumentem a jeho stromovou strukturou. Jak příklad jsme si napsali jednoduchý adresář. Pokud byste jej rozšířili, klidně se může srovnávat třeba s adresářem kontaktů programu Outlook Express. Pokud vám tedy není programovaní cizí, můžete náš adresář rozšířit, poslat nám jej na tento e-mail a my vaši verzi zveřejníme v některém z příštích článků.

Pokud jste ale přesto nepřišli XML na chuť, vydržte do příštího týdne, stejný program si totiž napíšeme s pomocí SQL databáze, se kterou umí Microsoft .NET pracovat na jedničku.

Nakonec nesmí chybět ani slíbený spustitelný program a projekt. K prvnímu budete potřebovat nainstalovaný novější Microsoft .NET Framework, pakliže si budete chtít projekt upravit a sestavit, budete potřebovat bezplatné vývojové prostředíMicrosoft Visual C# 2008 Express Edition.

Témata článku: Software, Programování, Unicode, .doc, Element, Nick

20 komentářů

Nejnovější komentáře

  • Daniel Housar 4. 1. 2009 19:00:01
    Někdo tu přede mnou napsal, že celé je to tu reklama na MS VS. Zvláštní že...
  • wizpal 4. 10. 2008 22:16:57
    ale no tak. nebuďte tak přísní, každý nějak začínal. :-D ale jinak...
  • PavelR 4. 10. 2008 19:04:43
    Treba kdyz si necham templatem zalozit WCF sluzbu, tak pri editaci jeji...
Určitě si přečtěte

Pojďme programovat elektroniku: Postavíme si titěrnou Wi-Fi meteostanici s lepším teploměrem než Netatmo

Pojďme programovat elektroniku: Postavíme si titěrnou Wi-Fi meteostanici s lepším teploměrem než Netatmo

** Dnes se podíváme na maličkou Wi-Fi destičku Wemos D1 mini ** A připojíme k ní barometrický a teplotní shield ** Poběží na ní web a nabídne i JSON API

18.  6.  2017 | Jakub Čížek | 28

Jak vybrat monitor k počítači: nenechte se zlákat nepodstatnými parametry

Jak vybrat monitor k počítači: nenechte se zlákat nepodstatnými parametry

** Na jaké parametry se zaměřit a kde vás výrobci chtějí nachytat ** Monitory se stále více specifikují pro konkrétní určení ** Náročný hráč nebo profesionální grafik mají různé požadavky

20.  6.  2017 | Tomáš Holčík | 31

Dlouhodobý test HTC Vive: co vám recenze o virtuální realitě neřeknou

Dlouhodobý test HTC Vive: co vám recenze o virtuální realitě neřeknou

** Ani hry se sebelepší grafikou vás nevtáhnou tolik, jako ve virtuální realitě ** Pro sledování filmů není VR ani zdaleka ideální ** I první generace je skvělá, stále však působí jako prototyp

20.  6.  2017 | Stanislav Janů | 22

Jak unikají informace o nových iPhonech? Třeba podprsenkami čínských pracovnic

Jak unikají informace o nových iPhonech? Třeba podprsenkami čínských pracovnic

** Na černém trhu mohou zaměstnanci továren za kradené součástky inkasovat částku ve výši ročního platu ** Velké množství informací je vyneseno i z centrály Applu ** Díly jsou pašovány v botách, podprsenkách i odpadem

21.  6.  2017 | Stanislav Janů | 22


Aktuální číslo časopisu Computer

Bojujeme proti Fake News

Dva velké testy: fotoaparáty a NASy

Co musíte vědět o změně evropského roamingu

Radíme s výběrem základní desky